{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "97f23a5b",
   "metadata": {},
   "source": [
    "# 实验1：使用Python实现线性回归"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d37e5552",
   "metadata": {},
   "source": [
    "欢迎来到《线性回归》的第一个实验。\n",
    "\n",
    "我们将学习如何使用多元线性回归模型，基于多个特征变量预测目标变量的值。\n",
    "\n",
    "在本实验中，我们将根据两个输入特征预测对应的目标值。\n",
    "\n",
    "你可以通过单击代码区域，然后使用键盘快捷键 **Shift + Enter** 来运行代码。或者在选择代码后使用 **运行** 按钮执行代码。像这样的 MarkDown 文本可以通过双击编辑，并使用这些相同的快捷键保存。\n",
    "\n",
    "**文档中提供的代码具有顺序性，必须从前往后依次运行代码，不能跳跃执行，否则可能出现意想不到的错误！**"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d0c0f48e",
   "metadata": {},
   "source": [
    "### 定义"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "722bd957",
   "metadata": {},
   "source": [
    "线性回归是一种用于预测连续因变量的模型，通过最小化预测值和实际值之间的误差，找到输入特征和输出之间的线性关系。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "25f390ae",
   "metadata": {},
   "source": [
    "### 公式"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "be438f30",
   "metadata": {},
   "source": [
    "$y=β_0+β_1x_1+β_2x_2+...+β_nx_n$\n",
    "\n",
    "其中，*y* 是目标变量，$x_1,x_2,...,x_n$ 是特征，$β_0$ 是截距，$β_n$ 是回归系数。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "47615310",
   "metadata": {},
   "source": [
    "### 第一步：导入所需的库"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f8fae04c",
   "metadata": {},
   "source": [
    "我们需要用到以下几个 Python 库：\n",
    "- `numpy`：用于处理数值计算和数组操作。\n",
    "- `sklearn.linear_model.LinearRegression`：提供线性回归模型。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "313a5242",
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.linear_model import LinearRegression\n",
    "import numpy as np"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a0212436",
   "metadata": {},
   "source": [
    "### 第二步：准备样本数据"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7d27f8c4",
   "metadata": {},
   "source": [
    "我们使用 NumPy 数组创建样本数据，其中：\n",
    "\n",
    "- 自变量 `X`：包含两个特征变量的二维数组。\n",
    "- 因变量 `y`：目标变量的一维数组。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "ee97171b",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 样本数据（X为输入特征，y为目标变量）\n",
    "X = np.array([[1, 2], [2, 3], [4, 5], [6, 7]])\n",
    "y = np.array([3, 5, 9, 13])"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "649a8f41",
   "metadata": {},
   "source": [
    "这里的特征矩阵 X 包含 4 个样本，每个样本有 2 个特征。目标变量 y 是对应的 4 个值。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a6b9d9db",
   "metadata": {},
   "source": [
    "### 第三步：创建并训练线性回归模型"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9bc3a370",
   "metadata": {},
   "source": [
    "使用 `LinearRegression()` 创建模型,并通过 `fit()` 方法训练模型."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "4c11c116",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<style>#sk-container-id-1 {\n",
       "  /* Definition of color scheme common for light and dark mode */\n",
       "  --sklearn-color-text: #000;\n",
       "  --sklearn-color-text-muted: #666;\n",
       "  --sklearn-color-line: gray;\n",
       "  /* Definition of color scheme for unfitted estimators */\n",
       "  --sklearn-color-unfitted-level-0: #fff5e6;\n",
       "  --sklearn-color-unfitted-level-1: #f6e4d2;\n",
       "  --sklearn-color-unfitted-level-2: #ffe0b3;\n",
       "  --sklearn-color-unfitted-level-3: chocolate;\n",
       "  /* Definition of color scheme for fitted estimators */\n",
       "  --sklearn-color-fitted-level-0: #f0f8ff;\n",
       "  --sklearn-color-fitted-level-1: #d4ebff;\n",
       "  --sklearn-color-fitted-level-2: #b3dbfd;\n",
       "  --sklearn-color-fitted-level-3: cornflowerblue;\n",
       "\n",
       "  /* Specific color for light theme */\n",
       "  --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, white)));\n",
       "  --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-icon: #696969;\n",
       "\n",
       "  @media (prefers-color-scheme: dark) {\n",
       "    /* Redefinition of color scheme for dark theme */\n",
       "    --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, #111)));\n",
       "    --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-icon: #878787;\n",
       "  }\n",
       "}\n",
       "\n",
       "#sk-container-id-1 {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 pre {\n",
       "  padding: 0;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 input.sk-hidden--visually {\n",
       "  border: 0;\n",
       "  clip: rect(1px 1px 1px 1px);\n",
       "  clip: rect(1px, 1px, 1px, 1px);\n",
       "  height: 1px;\n",
       "  margin: -1px;\n",
       "  overflow: hidden;\n",
       "  padding: 0;\n",
       "  position: absolute;\n",
       "  width: 1px;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-dashed-wrapped {\n",
       "  border: 1px dashed var(--sklearn-color-line);\n",
       "  margin: 0 0.4em 0.5em 0.4em;\n",
       "  box-sizing: border-box;\n",
       "  padding-bottom: 0.4em;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-container {\n",
       "  /* jupyter's `normalize.less` sets `[hidden] { display: none; }`\n",
       "     but bootstrap.min.css set `[hidden] { display: none !important; }`\n",
       "     so we also need the `!important` here to be able to override the\n",
       "     default hidden behavior on the sphinx rendered scikit-learn.org.\n",
       "     See: https://github.com/scikit-learn/scikit-learn/issues/21755 */\n",
       "  display: inline-block !important;\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-text-repr-fallback {\n",
       "  display: none;\n",
       "}\n",
       "\n",
       "div.sk-parallel-item,\n",
       "div.sk-serial,\n",
       "div.sk-item {\n",
       "  /* draw centered vertical line to link estimators */\n",
       "  background-image: linear-gradient(var(--sklearn-color-text-on-default-background), var(--sklearn-color-text-on-default-background));\n",
       "  background-size: 2px 100%;\n",
       "  background-repeat: no-repeat;\n",
       "  background-position: center center;\n",
       "}\n",
       "\n",
       "/* Parallel-specific style estimator block */\n",
       "\n",
       "#sk-container-id-1 div.sk-parallel-item::after {\n",
       "  content: \"\";\n",
       "  width: 100%;\n",
       "  border-bottom: 2px solid var(--sklearn-color-text-on-default-background);\n",
       "  flex-grow: 1;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-parallel {\n",
       "  display: flex;\n",
       "  align-items: stretch;\n",
       "  justify-content: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-parallel-item {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-parallel-item:first-child::after {\n",
       "  align-self: flex-end;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-parallel-item:last-child::after {\n",
       "  align-self: flex-start;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-parallel-item:only-child::after {\n",
       "  width: 0;\n",
       "}\n",
       "\n",
       "/* Serial-specific style estimator block */\n",
       "\n",
       "#sk-container-id-1 div.sk-serial {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "  align-items: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  padding-right: 1em;\n",
       "  padding-left: 1em;\n",
       "}\n",
       "\n",
       "\n",
       "/* Toggleable style: style used for estimator/Pipeline/ColumnTransformer box that is\n",
       "clickable and can be expanded/collapsed.\n",
       "- Pipeline and ColumnTransformer use this feature and define the default style\n",
       "- Estimators will overwrite some part of the style using the `sk-estimator` class\n",
       "*/\n",
       "\n",
       "/* Pipeline and ColumnTransformer style (default) */\n",
       "\n",
       "#sk-container-id-1 div.sk-toggleable {\n",
       "  /* Default theme specific background. It is overwritten whether we have a\n",
       "  specific estimator or a Pipeline/ColumnTransformer */\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       "/* Toggleable label */\n",
       "#sk-container-id-1 label.sk-toggleable__label {\n",
       "  cursor: pointer;\n",
       "  display: flex;\n",
       "  width: 100%;\n",
       "  margin-bottom: 0;\n",
       "  padding: 0.5em;\n",
       "  box-sizing: border-box;\n",
       "  text-align: center;\n",
       "  align-items: start;\n",
       "  justify-content: space-between;\n",
       "  gap: 0.5em;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 label.sk-toggleable__label .caption {\n",
       "  font-size: 0.6rem;\n",
       "  font-weight: lighter;\n",
       "  color: var(--sklearn-color-text-muted);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 label.sk-toggleable__label-arrow:before {\n",
       "  /* Arrow on the left of the label */\n",
       "  content: \"▸\";\n",
       "  float: left;\n",
       "  margin-right: 0.25em;\n",
       "  color: var(--sklearn-color-icon);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 label.sk-toggleable__label-arrow:hover:before {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "/* Toggleable content - dropdown */\n",
       "\n",
       "#sk-container-id-1 div.sk-toggleable__content {\n",
       "  max-height: 0;\n",
       "  max-width: 0;\n",
       "  overflow: hidden;\n",
       "  text-align: left;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-toggleable__content.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-toggleable__content pre {\n",
       "  margin: 0.2em;\n",
       "  border-radius: 0.25em;\n",
       "  color: var(--sklearn-color-text);\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-toggleable__content.fitted pre {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 input.sk-toggleable__control:checked~div.sk-toggleable__content {\n",
       "  /* Expand drop-down */\n",
       "  max-height: 200px;\n",
       "  max-width: 100%;\n",
       "  overflow: auto;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {\n",
       "  content: \"▾\";\n",
       "}\n",
       "\n",
       "/* Pipeline/ColumnTransformer-specific style */\n",
       "\n",
       "#sk-container-id-1 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-label.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator-specific style */\n",
       "\n",
       "/* Colorize estimator box */\n",
       "#sk-container-id-1 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-estimator.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-label label.sk-toggleable__label,\n",
       "#sk-container-id-1 div.sk-label label {\n",
       "  /* The background is the default theme color */\n",
       "  color: var(--sklearn-color-text-on-default-background);\n",
       "}\n",
       "\n",
       "/* On hover, darken the color of the background */\n",
       "#sk-container-id-1 div.sk-label:hover label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "/* Label box, darken color on hover, fitted */\n",
       "#sk-container-id-1 div.sk-label.fitted:hover label.sk-toggleable__label.fitted {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator label */\n",
       "\n",
       "#sk-container-id-1 div.sk-label label {\n",
       "  font-family: monospace;\n",
       "  font-weight: bold;\n",
       "  display: inline-block;\n",
       "  line-height: 1.2em;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-label-container {\n",
       "  text-align: center;\n",
       "}\n",
       "\n",
       "/* Estimator-specific */\n",
       "#sk-container-id-1 div.sk-estimator {\n",
       "  font-family: monospace;\n",
       "  border: 1px dotted var(--sklearn-color-border-box);\n",
       "  border-radius: 0.25em;\n",
       "  box-sizing: border-box;\n",
       "  margin-bottom: 0.5em;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-estimator.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "/* on hover */\n",
       "#sk-container-id-1 div.sk-estimator:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-estimator.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Specification for estimator info (e.g. \"i\" and \"?\") */\n",
       "\n",
       "/* Common style for \"i\" and \"?\" */\n",
       "\n",
       ".sk-estimator-doc-link,\n",
       "a:link.sk-estimator-doc-link,\n",
       "a:visited.sk-estimator-doc-link {\n",
       "  float: right;\n",
       "  font-size: smaller;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  border-radius: 1em;\n",
       "  height: 1em;\n",
       "  width: 1em;\n",
       "  text-decoration: none !important;\n",
       "  margin-left: 0.5em;\n",
       "  text-align: center;\n",
       "  /* unfitted */\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted,\n",
       "a:link.sk-estimator-doc-link.fitted,\n",
       "a:visited.sk-estimator-doc-link.fitted {\n",
       "  /* fitted */\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "div.sk-estimator:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "div.sk-estimator.fitted:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "/* Span, style for the box shown on hovering the info icon */\n",
       ".sk-estimator-doc-link span {\n",
       "  display: none;\n",
       "  z-index: 9999;\n",
       "  position: relative;\n",
       "  font-weight: normal;\n",
       "  right: .2ex;\n",
       "  padding: .5ex;\n",
       "  margin: .5ex;\n",
       "  width: min-content;\n",
       "  min-width: 20ex;\n",
       "  max-width: 50ex;\n",
       "  color: var(--sklearn-color-text);\n",
       "  box-shadow: 2pt 2pt 4pt #999;\n",
       "  /* unfitted */\n",
       "  background: var(--sklearn-color-unfitted-level-0);\n",
       "  border: .5pt solid var(--sklearn-color-unfitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted span {\n",
       "  /* fitted */\n",
       "  background: var(--sklearn-color-fitted-level-0);\n",
       "  border: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link:hover span {\n",
       "  display: block;\n",
       "}\n",
       "\n",
       "/* \"?\"-specific style due to the `<a>` HTML tag */\n",
       "\n",
       "#sk-container-id-1 a.estimator_doc_link {\n",
       "  float: right;\n",
       "  font-size: 1rem;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  border-radius: 1rem;\n",
       "  height: 1rem;\n",
       "  width: 1rem;\n",
       "  text-decoration: none;\n",
       "  /* unfitted */\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 a.estimator_doc_link.fitted {\n",
       "  /* fitted */\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "#sk-container-id-1 a.estimator_doc_link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 a.estimator_doc_link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "</style><div id=\"sk-container-id-1\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>LinearRegression()</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-1\" type=\"checkbox\" checked><label for=\"sk-estimator-id-1\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow\"><div><div>LinearRegression</div></div><div><a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.6/modules/generated/sklearn.linear_model.LinearRegression.html\">?<span>Documentation for LinearRegression</span></a><span class=\"sk-estimator-doc-link fitted\">i<span>Fitted</span></span></div></label><div class=\"sk-toggleable__content fitted\"><pre>LinearRegression()</pre></div> </div></div></div></div>"
      ],
      "text/plain": [
       "LinearRegression()"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 创建线性回归模型\n",
    "model = LinearRegression()\n",
    "model.fit(X, y)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e1c0a872",
   "metadata": {},
   "source": [
    "### 第四步：查看模型的训练结果"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a12cc483",
   "metadata": {},
   "source": [
    "训练完成后，我们可以查看模型的两个重要参数：\n",
    "\n",
    "- 截距（intercept）：模型方程中的常数项。\n",
    "- 系数（coefficients）：每个特征变量对应的权重，表示该特征对目标变量的影响程度。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "2d6db078",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "截距: -3.552713678800501e-15\n",
      "系数: [1. 1.]\n"
     ]
    }
   ],
   "source": [
    "# 输出模型参数：截距和系数\n",
    "print(f\"截距: {model.intercept_}\")\n",
    "print(f\"系数: {model.coef_}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a1b35b89",
   "metadata": {},
   "source": [
    "### 第五步：使用模型进行预测"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8415b40b",
   "metadata": {},
   "source": [
    "通过 `predict()` 方法，输入新的特征值来预测目标变量。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "29f080ed",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "预测值: [15.]\n"
     ]
    }
   ],
   "source": [
    "# 预测\n",
    "y_pred = model.predict(np.array([[7, 8]]))\n",
    "print(f\"预测值: {y_pred}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3f3458f7",
   "metadata": {},
   "source": [
    "# 实验2：奶茶店销售额预测"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "74a641c6",
   "metadata": {},
   "source": [
    "在本实验中，我们将学习如何使用一元线性回归模型，预测奶茶店在不同气温下的销售额。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2f177fc0",
   "metadata": {},
   "source": [
    "### 第一步：导入所需的库"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "da63c58f",
   "metadata": {},
   "source": [
    "我们需要用到以下几个Python库：\n",
    "- `pandas`：用于读取和处理数据表格。\n",
    "- `matplotlib` 和 `seaborn`：用于绘图和可视化。\n",
    "- `sklearn.linear_model`：提供了常用的机器学习模型，这里使用其中的 `LinearRegression`。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "e7cf8ee4",
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns\n",
    "from sklearn.linear_model import LinearRegression"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4f177500",
   "metadata": {},
   "source": [
    "### 第二步：读取奶茶店销售数据"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9488d0e3",
   "metadata": {},
   "source": [
    "我们将使用一份 CSV 文件格式的数据，其中包含了每日的最高气温与对应的销售额。\n",
    "\n",
    "让我们使用 `pandas` 读取该数据文件，并展示前几行内容，确认数据结构。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "52fe7a9e",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>日期</th>\n",
       "      <th>当日最高气温(℃)</th>\n",
       "      <th>销售额(元)</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2024/3/1</td>\n",
       "      <td>38</td>\n",
       "      <td>2825</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2024/3/2</td>\n",
       "      <td>28</td>\n",
       "      <td>2592</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2024/3/3</td>\n",
       "      <td>24</td>\n",
       "      <td>2187</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2024/3/4</td>\n",
       "      <td>20</td>\n",
       "      <td>2019</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2024/3/5</td>\n",
       "      <td>23</td>\n",
       "      <td>2196</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "         日期  当日最高气温(℃)  销售额(元)\n",
       "0  2024/3/1         38    2825\n",
       "1  2024/3/2         28    2592\n",
       "2  2024/3/3         24    2187\n",
       "3  2024/3/4         20    2019\n",
       "4  2024/3/5         23    2196"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "file_path = 'data/一元奶茶店销售数据.csv'\n",
    "uploaded_data = pd.read_csv(file_path, encoding='gbk')\n",
    "uploaded_data.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a1b23853",
   "metadata": {},
   "source": [
    "### 第三步：准备模型训练所需的数据"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "57c02c1f",
   "metadata": {},
   "source": [
    "为了建立模型，我们需要从数据中提取：\n",
    "- 自变量 X：也叫特征变量，这里是“当日最高气温(℃)”\n",
    "- 因变量 y：我们希望预测的目标变量，这里是“销售额(元)”"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "6d62f7c5",
   "metadata": {},
   "outputs": [],
   "source": [
    "X = uploaded_data[['当日最高气温(℃)']]\n",
    "y = uploaded_data['销售额(元)']"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e5783f4e",
   "metadata": {},
   "source": [
    "### 第四步：创建并训练线性回归模型"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9d1a57f0",
   "metadata": {},
   "source": [
    "现在我们使用 `LinearRegression()` 来建立模型，并使用我们提取的 `X` 和 `y` 数据进行训练。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "72b506d8",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<style>#sk-container-id-2 {\n",
       "  /* Definition of color scheme common for light and dark mode */\n",
       "  --sklearn-color-text: #000;\n",
       "  --sklearn-color-text-muted: #666;\n",
       "  --sklearn-color-line: gray;\n",
       "  /* Definition of color scheme for unfitted estimators */\n",
       "  --sklearn-color-unfitted-level-0: #fff5e6;\n",
       "  --sklearn-color-unfitted-level-1: #f6e4d2;\n",
       "  --sklearn-color-unfitted-level-2: #ffe0b3;\n",
       "  --sklearn-color-unfitted-level-3: chocolate;\n",
       "  /* Definition of color scheme for fitted estimators */\n",
       "  --sklearn-color-fitted-level-0: #f0f8ff;\n",
       "  --sklearn-color-fitted-level-1: #d4ebff;\n",
       "  --sklearn-color-fitted-level-2: #b3dbfd;\n",
       "  --sklearn-color-fitted-level-3: cornflowerblue;\n",
       "\n",
       "  /* Specific color for light theme */\n",
       "  --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, white)));\n",
       "  --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-icon: #696969;\n",
       "\n",
       "  @media (prefers-color-scheme: dark) {\n",
       "    /* Redefinition of color scheme for dark theme */\n",
       "    --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, #111)));\n",
       "    --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-icon: #878787;\n",
       "  }\n",
       "}\n",
       "\n",
       "#sk-container-id-2 {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "#sk-container-id-2 pre {\n",
       "  padding: 0;\n",
       "}\n",
       "\n",
       "#sk-container-id-2 input.sk-hidden--visually {\n",
       "  border: 0;\n",
       "  clip: rect(1px 1px 1px 1px);\n",
       "  clip: rect(1px, 1px, 1px, 1px);\n",
       "  height: 1px;\n",
       "  margin: -1px;\n",
       "  overflow: hidden;\n",
       "  padding: 0;\n",
       "  position: absolute;\n",
       "  width: 1px;\n",
       "}\n",
       "\n",
       "#sk-container-id-2 div.sk-dashed-wrapped {\n",
       "  border: 1px dashed var(--sklearn-color-line);\n",
       "  margin: 0 0.4em 0.5em 0.4em;\n",
       "  box-sizing: border-box;\n",
       "  padding-bottom: 0.4em;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       "#sk-container-id-2 div.sk-container {\n",
       "  /* jupyter's `normalize.less` sets `[hidden] { display: none; }`\n",
       "     but bootstrap.min.css set `[hidden] { display: none !important; }`\n",
       "     so we also need the `!important` here to be able to override the\n",
       "     default hidden behavior on the sphinx rendered scikit-learn.org.\n",
       "     See: https://github.com/scikit-learn/scikit-learn/issues/21755 */\n",
       "  display: inline-block !important;\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       "#sk-container-id-2 div.sk-text-repr-fallback {\n",
       "  display: none;\n",
       "}\n",
       "\n",
       "div.sk-parallel-item,\n",
       "div.sk-serial,\n",
       "div.sk-item {\n",
       "  /* draw centered vertical line to link estimators */\n",
       "  background-image: linear-gradient(var(--sklearn-color-text-on-default-background), var(--sklearn-color-text-on-default-background));\n",
       "  background-size: 2px 100%;\n",
       "  background-repeat: no-repeat;\n",
       "  background-position: center center;\n",
       "}\n",
       "\n",
       "/* Parallel-specific style estimator block */\n",
       "\n",
       "#sk-container-id-2 div.sk-parallel-item::after {\n",
       "  content: \"\";\n",
       "  width: 100%;\n",
       "  border-bottom: 2px solid var(--sklearn-color-text-on-default-background);\n",
       "  flex-grow: 1;\n",
       "}\n",
       "\n",
       "#sk-container-id-2 div.sk-parallel {\n",
       "  display: flex;\n",
       "  align-items: stretch;\n",
       "  justify-content: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       "#sk-container-id-2 div.sk-parallel-item {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "}\n",
       "\n",
       "#sk-container-id-2 div.sk-parallel-item:first-child::after {\n",
       "  align-self: flex-end;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-2 div.sk-parallel-item:last-child::after {\n",
       "  align-self: flex-start;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-2 div.sk-parallel-item:only-child::after {\n",
       "  width: 0;\n",
       "}\n",
       "\n",
       "/* Serial-specific style estimator block */\n",
       "\n",
       "#sk-container-id-2 div.sk-serial {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "  align-items: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  padding-right: 1em;\n",
       "  padding-left: 1em;\n",
       "}\n",
       "\n",
       "\n",
       "/* Toggleable style: style used for estimator/Pipeline/ColumnTransformer box that is\n",
       "clickable and can be expanded/collapsed.\n",
       "- Pipeline and ColumnTransformer use this feature and define the default style\n",
       "- Estimators will overwrite some part of the style using the `sk-estimator` class\n",
       "*/\n",
       "\n",
       "/* Pipeline and ColumnTransformer style (default) */\n",
       "\n",
       "#sk-container-id-2 div.sk-toggleable {\n",
       "  /* Default theme specific background. It is overwritten whether we have a\n",
       "  specific estimator or a Pipeline/ColumnTransformer */\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       "/* Toggleable label */\n",
       "#sk-container-id-2 label.sk-toggleable__label {\n",
       "  cursor: pointer;\n",
       "  display: flex;\n",
       "  width: 100%;\n",
       "  margin-bottom: 0;\n",
       "  padding: 0.5em;\n",
       "  box-sizing: border-box;\n",
       "  text-align: center;\n",
       "  align-items: start;\n",
       "  justify-content: space-between;\n",
       "  gap: 0.5em;\n",
       "}\n",
       "\n",
       "#sk-container-id-2 label.sk-toggleable__label .caption {\n",
       "  font-size: 0.6rem;\n",
       "  font-weight: lighter;\n",
       "  color: var(--sklearn-color-text-muted);\n",
       "}\n",
       "\n",
       "#sk-container-id-2 label.sk-toggleable__label-arrow:before {\n",
       "  /* Arrow on the left of the label */\n",
       "  content: \"▸\";\n",
       "  float: left;\n",
       "  margin-right: 0.25em;\n",
       "  color: var(--sklearn-color-icon);\n",
       "}\n",
       "\n",
       "#sk-container-id-2 label.sk-toggleable__label-arrow:hover:before {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "/* Toggleable content - dropdown */\n",
       "\n",
       "#sk-container-id-2 div.sk-toggleable__content {\n",
       "  max-height: 0;\n",
       "  max-width: 0;\n",
       "  overflow: hidden;\n",
       "  text-align: left;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-2 div.sk-toggleable__content.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-2 div.sk-toggleable__content pre {\n",
       "  margin: 0.2em;\n",
       "  border-radius: 0.25em;\n",
       "  color: var(--sklearn-color-text);\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-2 div.sk-toggleable__content.fitted pre {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-2 input.sk-toggleable__control:checked~div.sk-toggleable__content {\n",
       "  /* Expand drop-down */\n",
       "  max-height: 200px;\n",
       "  max-width: 100%;\n",
       "  overflow: auto;\n",
       "}\n",
       "\n",
       "#sk-container-id-2 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {\n",
       "  content: \"▾\";\n",
       "}\n",
       "\n",
       "/* Pipeline/ColumnTransformer-specific style */\n",
       "\n",
       "#sk-container-id-2 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-2 div.sk-label.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator-specific style */\n",
       "\n",
       "/* Colorize estimator box */\n",
       "#sk-container-id-2 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-2 div.sk-estimator.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-2 div.sk-label label.sk-toggleable__label,\n",
       "#sk-container-id-2 div.sk-label label {\n",
       "  /* The background is the default theme color */\n",
       "  color: var(--sklearn-color-text-on-default-background);\n",
       "}\n",
       "\n",
       "/* On hover, darken the color of the background */\n",
       "#sk-container-id-2 div.sk-label:hover label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "/* Label box, darken color on hover, fitted */\n",
       "#sk-container-id-2 div.sk-label.fitted:hover label.sk-toggleable__label.fitted {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator label */\n",
       "\n",
       "#sk-container-id-2 div.sk-label label {\n",
       "  font-family: monospace;\n",
       "  font-weight: bold;\n",
       "  display: inline-block;\n",
       "  line-height: 1.2em;\n",
       "}\n",
       "\n",
       "#sk-container-id-2 div.sk-label-container {\n",
       "  text-align: center;\n",
       "}\n",
       "\n",
       "/* Estimator-specific */\n",
       "#sk-container-id-2 div.sk-estimator {\n",
       "  font-family: monospace;\n",
       "  border: 1px dotted var(--sklearn-color-border-box);\n",
       "  border-radius: 0.25em;\n",
       "  box-sizing: border-box;\n",
       "  margin-bottom: 0.5em;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-2 div.sk-estimator.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "/* on hover */\n",
       "#sk-container-id-2 div.sk-estimator:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-2 div.sk-estimator.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Specification for estimator info (e.g. \"i\" and \"?\") */\n",
       "\n",
       "/* Common style for \"i\" and \"?\" */\n",
       "\n",
       ".sk-estimator-doc-link,\n",
       "a:link.sk-estimator-doc-link,\n",
       "a:visited.sk-estimator-doc-link {\n",
       "  float: right;\n",
       "  font-size: smaller;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  border-radius: 1em;\n",
       "  height: 1em;\n",
       "  width: 1em;\n",
       "  text-decoration: none !important;\n",
       "  margin-left: 0.5em;\n",
       "  text-align: center;\n",
       "  /* unfitted */\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted,\n",
       "a:link.sk-estimator-doc-link.fitted,\n",
       "a:visited.sk-estimator-doc-link.fitted {\n",
       "  /* fitted */\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "div.sk-estimator:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "div.sk-estimator.fitted:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "/* Span, style for the box shown on hovering the info icon */\n",
       ".sk-estimator-doc-link span {\n",
       "  display: none;\n",
       "  z-index: 9999;\n",
       "  position: relative;\n",
       "  font-weight: normal;\n",
       "  right: .2ex;\n",
       "  padding: .5ex;\n",
       "  margin: .5ex;\n",
       "  width: min-content;\n",
       "  min-width: 20ex;\n",
       "  max-width: 50ex;\n",
       "  color: var(--sklearn-color-text);\n",
       "  box-shadow: 2pt 2pt 4pt #999;\n",
       "  /* unfitted */\n",
       "  background: var(--sklearn-color-unfitted-level-0);\n",
       "  border: .5pt solid var(--sklearn-color-unfitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted span {\n",
       "  /* fitted */\n",
       "  background: var(--sklearn-color-fitted-level-0);\n",
       "  border: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link:hover span {\n",
       "  display: block;\n",
       "}\n",
       "\n",
       "/* \"?\"-specific style due to the `<a>` HTML tag */\n",
       "\n",
       "#sk-container-id-2 a.estimator_doc_link {\n",
       "  float: right;\n",
       "  font-size: 1rem;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  border-radius: 1rem;\n",
       "  height: 1rem;\n",
       "  width: 1rem;\n",
       "  text-decoration: none;\n",
       "  /* unfitted */\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "}\n",
       "\n",
       "#sk-container-id-2 a.estimator_doc_link.fitted {\n",
       "  /* fitted */\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "#sk-container-id-2 a.estimator_doc_link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "#sk-container-id-2 a.estimator_doc_link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "</style><div id=\"sk-container-id-2\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>LinearRegression()</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-2\" type=\"checkbox\" checked><label for=\"sk-estimator-id-2\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow\"><div><div>LinearRegression</div></div><div><a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.6/modules/generated/sklearn.linear_model.LinearRegression.html\">?<span>Documentation for LinearRegression</span></a><span class=\"sk-estimator-doc-link fitted\">i<span>Fitted</span></span></div></label><div class=\"sk-toggleable__content fitted\"><pre>LinearRegression()</pre></div> </div></div></div></div>"
      ],
      "text/plain": [
       "LinearRegression()"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "model = LinearRegression()\n",
    "model.fit(X, y)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9126bfec",
   "metadata": {},
   "source": [
    "### 第五步：查看模型的训练结果"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b9a09ea4",
   "metadata": {},
   "source": [
    "训练完成后，我们可以查看模型的两个重要参数：\n",
    "- 截距（intercept）：表示当气温为0℃时的预测销售额。\n",
    "- 斜率（slope）：表示气温每升高1℃，销售额的平均增长量。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "e42c492f",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "截距: 1084.53, 斜率: 47.57\n"
     ]
    }
   ],
   "source": [
    "intercept = model.intercept_\n",
    "slope = model.coef_[0]\n",
    "print(f\"截距: {intercept:.2f}, 斜率: {slope:.2f}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9d14c870",
   "metadata": {},
   "source": [
    "### 第六步：绘制散点图与回归线"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d03bf133",
   "metadata": {},
   "source": [
    "我们将使用 `seaborn` 库的 `regplot()` 函数来绘制数据点和拟合的回归直线。\n",
    "通过可视化，我们可以更直观地看到气温与销售额之间的关系。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "716f8907",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAxYAAAJOCAYAAAAqFJGJAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAADFZElEQVR4nOzdd3yT5frH8U+SNuku0FJKmbLLlD0cgANQEbfiqAvx/BwgKi5c4GC45+EouOWIHo8cxIHjCFVEREFkz4MKQhlSUkpLmib374+Y2HRAC22Ttt/369XXS577yZM7oZHnyn1f12UxxhhERERERESOgTXUExARERERkZpPgYWIiIiIiBwzBRYiIiIiInLMFFiIiIiIiMgxU2AhIiIiIiLHTIGFiIiIiIgcMwUWIiIiIiJyzBRYiIiIiIjIMVNgISIiIiIix0yBhYiIyJ9++eUXLBYLLVu2DPVUpJq1bNkSi8XCL7/8EuqpiNRYCixEahGLxVLhn0GDBoV62rXOxIkTmThxYqinUav89ttv3HbbbXTu3JnY2Fiio6Np3rw5AwYM4I477uCzzz4L9RSr3MSJE0t8fm02G8nJyQwePJgZM2bg9XpDPU0RqcMiQj0BEak8J5xwQoljTqeT1atXlznepUuXKp9XXTNp0iQABReV5KuvvuLcc8/lwIED2Gw2mjVrRkpKCvv27WPJkiV89913vPbaa+zduzfUU60WCQkJgc+t2+1m69atLFy4kIULF/Kf//yHuXPnEhGhf94rqnXr1kRFRREZGRnqqYjUWPo/j0gtsmjRohLHFi5cyODBg8scFwlnOTk5XHLJJRw4cICzzjqLF198kRYtWgTG9+/fz9y5c3nvvfdCOMvq1b17dxYuXBh07M033+Saa67hk08+4bXXXmP06NGhmVwN9t///jfUUxCp8bQVSkREwtYnn3zC3r17SUhI4L333gsKKgDq1avHVVddxccffxyiGYaHK6+8kssuuwyADz74IMSzEZG6SoGFSB1XWFjIP/7xD0488UTq1atHVFQUHTp04L777iMnJ6fE+a+//joWi4Wrr76a/Px87rnnHlq1akV0dDTt27fn+eefD5z7xx9/cMstt9CiRQuioqLo1KkTr7/+eqnzGDRoEBaLhYULF7J06VLOOussGjRoQGxsLAMGDOA///nPYV/H0qVLGTlyJE2aNMFut9OoUSMuuugifvrpp1LP9+9RB/j3v//NySefTL169YKSN7Oysnj++ecZOnQoLVu2JCoqivr16zNw4EDeeuutEtf074Ev/hz+H/91/eeVtVWq6Htc1vGDBw8yYcIE2rVrR1RUVIlcmYq+H6XJzs7G4XAQERHBrl27yjzvggsuwGKx8NxzzwWOHTx4kIceeoiuXbsSGxtLVFQUzZo1Y9CgQUydOhW3212uOfzvf/8DoF27dsTExJR77v7HTps2jUGDBtGsWTMcDgcNGzZk2LBhRx2IVPTzAjBv3jyGDh1KcnIykZGRNGzYkK5duzJmzBjWrVt3VPMoTe/evQHKTD7evn07Y8eOpV27dkRHR1OvXj0GDx7M+++/X+Y1Dxw4wJ133hn4/T/uuOO46667OHjwIFdffTUWi6XEZ7ro8a1bt3L11VfTpEkTIiIign7njTHMnj2b008/naSkJBwOB61atWLs2LFkZWWVOp9FixZx3nnnkZqaSmRkJA0aNCA9PZ3rrruOJUuWBJ1bWFjIs88+S58+fYiPj8fhcJCWlsaAAQN48MEH2b9/f9D5h0vedrvdPP/88/Tp04eEhARiY2Pp1q0bjz76KHl5eSXOL14E4O2336ZXr17ExMTQoEEDLrroosDvtkitYkSkVluwYIEBTGkfd6fTaU4++WQDGKvValq0aGE6d+5s7Ha7AUx6errZtWtX0GNee+01A5hLL73U9O/f39hsNtO1a1fTsmXLwPNMmjTJ7Nq1y7Rt29bY7XbTvXt3k5aWFhh/9dVXS8xl4MCBBjAPPfSQsdvtJi4uzvTq1cs0btw48Lgnn3yy1Nf41FNPGYvFYgDToEED0717d5OUlGQAExkZaf7973+XeIz/mlOnTjWAadSokendu7dp2LCh2bp1qzHGmIcfftgAJjo62rRu3dr06tXLNG/ePPDY//u//wu65iuvvGJOOOGEwPgJJ5wQ9LNz505jjDEPPvigAcyDDz5Y6uvxv8dXXXVVqccvvvhi06NHD2OxWEx6errp3r27GTJkyDG9H2U5++yzDWCee+65UsedTqeJiooyNpst8Prcbrfp169f4Peqffv2plevXiYtLc1YrVYDmOzs7HI9//PPP28Ak5iYWO7H+I0aNcoAJi4uzrRr167E79PUqVNLPGbr1q0GMC1atCj1tVb08+KfP2BSU1NNr169TNu2bU1UVJQBzNNPP13u1+P/vRk4cGCp41OmTDGA6dGjR4mxhQsXmsTExMDvc5cuXUyzZs0Cc7v99ttLfb3du3cPvN4uXbqYTp06GYvFYnr37m0uvfRSA5jXXnst6HFXXXWVAczdd99t6tWrZxwOh+nRo4fp0KGDmThxojHGmIKCAnPRRRcFnj8tLc1069bNxMTEGMA0btzYbNiwIei6//nPfwK/P0lJSYFrxsbGGsDccsstQedfcMEFgeu3bt3a9O7d2zRr1szYbDYDmJ9++ino/BYtWhgg8Pn3y8vLM6ecckrgWunp6aZr166BuRx//PFm7969QY8p+nt09913B/67W7duxuFwBF7jnj17Sv27FKmpFFiI1HKHCyxGjhxpAHPqqaeaLVu2BI7v27fPnH/++QYwF154YdBj/De3kZGRpkuXLuZ///tfYOydd94J3LgMGTLEDB48OOhG69FHHw38g1pYWBh0XX9gERERYUaOHGlyc3ONMcZ4vV7z3HPPBcZWrFgR9LhPP/3UWCwWk5ycXOKGeebMmSYiIsLEx8ebHTt2BI353xO73W5efvll4/V6jTG+m2K3222MMeabb74xX331VYm5/vzzzyY9Pd0AZuHChSXe17Leb79jDSxsNptp166dWbt2bWAsPz//mN6Psvj/Tvv371/q+Ouvv24Ac9pppwWOvf/++wYw3bp1M9u2bQs6f/fu3eaZZ54xBw8eLNfzb9iwIXAD17NnT/P++++b/fv3l+uxn3zyiVmyZEng79bv66+/No0bNzY2m81s3rw5aOxwgUVFPy9ut9vUr1/fREREmDlz5gRdy+12m3nz5pnMzMxyvRZjjhxY+D9D1157bdDx33//3TRo0MBYLBYzefJkc+jQocDYt99+a5o0aWIAM2/evKDH3XTTTQYwrVq1CvpdW716tWnRooWJjIw8bGBhs9nMiBEjzB9//BEY8/+e+m+2u3fvHnSDn5eXZ2688UYDmF69egVdt3PnzgYwf//734M+k16v1yxYsMB8+OGHgWM//vijAUyzZs2C5m6ML2CaMWOG+e2334KOlxVY3H777YHgZ9myZYHjmzZtMh06dAgE+0X5f48iIiJMQkKC+eSTTwJjO3fuNF27djWAueuuu4xIbaLAQqSWKyuw+PnnnwM3UDk5OSUed/DgQdOsWTNjsVjML7/8Ejjuv7m1WCxm+fLlJR7Xv3//QHDx+++/B40VFhYGbmKKP9Z/U5SSkhK4+SjKf+N25ZVXBh3v0aOHAczcuXNLff3+m4KHHnoo6Lj/PRkzZkypjzuSL7/80gBm9OjRJcaqOrAAgm5wijra96MsBw8eNHFxcaXecBljzNChQw1gXnnllcAx/zfnzz77bLme40j8Aan/x2KxmPbt25urr77azJ49O+hGubxmzpxpAPPoo48GHS8rsDiaz8vOnTsDN8+VobTAoqCgwKxfvz6wOhMVFWVWrlwZ9LjbbrvNAObWW28t9brz5s0zgDnllFMCx/bv3x9YVVm0aFGJxxT9/0pZgUVqamrgC4Kidu/ebRwOh0lISCgReBpjjMfjMb179zaA+frrrwPHHQ6HqV+/fqmvoTh/QFzWay5NaYGF0+kMrKIUDw6NMWbp0qWB38miQar/9whKX2n98MMPDWC6du1a7vmJ1ATKsRCpo+bMmQPAxRdfTHx8fInxmJgYTjvtNIwxfPPNNyXGu3fvTvfu3UscP/744wE444wzSEtLCxqz2Wx07doVoMz9xaNGjSIqKqrE8RtvvBEgqF/Br7/+yvLly0lJSWHEiBGlXs9/PDMzs9TxK6+8stTjfgcOHGDGjBlcddVVDBkyhJNOOokTTzyRu+++G4Cff/75sI+vCp06daJHjx4ljlfG+1FcTEwM55xzDgCzZ88OGtuzZw///e9/cTgcXHDBBYHjzZo1A+Djjz8udf95RU2YMIGvvvqKM888E7vdjjGGDRs28PrrrzNy5EjatWtXokpS0Tk+++yzXHbZZZx22mmceOKJnHjiiTzzzDNA+f/+jubz0rBhQxwOBxs3bqzU35PMzMxA3o7dbqdDhw688sordOzYkY8//rhECWl/Mvd1111X6vWGDRuG3W5n8eLFFBYWAvDNN99w6NAh2rZtW2qZ6kGDBnHccccddp4XXHABsbGxJY5/8sknuFwuhg4dStOmTUuMW61Whg8fHnitfs2aNWP//v188cUXh31e/7ngq/S0b9++I55flkWLFpGXl0fz5s0Dn4OievfuTf/+/THGlDmvUaNGlfo4KPv/gyI1lcrNitRRq1atAnw3TIsXLy71nF9//RWA33//vcRY69atS31Mw4YNyzWem5tb6nh6evphj+/atYucnBwSEhICr+HQoUOceOKJpT7u0KFDZb6Gwz0fwE8//cTw4cPZsWNHmeccy03L0SprzpXxfpTmsssuY9asWbzzzjuBgArgX//6F4WFhQwfPpzExMTA8XPPPZeWLVvy+eefk5aWxrBhwzjppJMYNGgQnTp1KvfzFjV48GAGDx5Mfn4+P/74I99//z2ffPIJCxcu5LfffuPMM89k+fLldOjQIfCYzz//nIsvvhin01nmdcv793c0nxebzcbYsWN5/PHH6dGjByeccAKDBw8OBKelBdDlUbSPxYEDB9i4cSOHDh2iSZMmJQLO3NzcQDLy9ddff9jrHjp0iD/++INGjRqxadMmgMAXAaXp0qULW7duLXP8SL+nS5YsKfP31F8soOjv6a233spNN93EkCFD6NmzZyBQHDhwYIlgr3///vTt25fvv/+eZs2acfrpp3PyySczcOBAevToEVRk4XA2btwIQIcOHcp8TKdOnfjuu+8C5xaVnJwc9NnwS0lJAcr+/6BITaXAQqSO8t9sbd68mc2bNx/23Pz8/BLHyqrQ4//H90jjxphSx/3/4B7u+IEDB0hISAi8hpycHL799tsyZu9T2msASv1GFcDj8XDxxRezY8cOzjzzTO666y46depEvXr1sNlsbN68mbZt25a7ulFlKmvOlfF+lGbIkCEkJyezcuVK1q5dS8eOHQF45513AAJlTovO75tvvuGBBx7g/fff59133+Xdd98FoGPHjkybNi3wjXRFRUdHc9JJJ3HSSScxfvx4Fi1axLBhwzh48CBPPvkkM2bMAHz9LUaOHInT6eTKK6/kxhtvpH379iQkJGC1Wvnyyy85/fTTy/33d7Sfl6lTp9KkSRNefPFFvvnmm8BqRkJCAjfeeCMTJ07E4XBU6D0o3sdi7969XHPNNXz00UdcdNFFfP7554HPWdGg6ki/E0XnfvDgQYBSV2f8DjcGR/493bZtG9u2bSvXfMC3ahkfH8+TTz7JsmXLWLZsGdOmTSMqKoqMjAwef/zxwE281Wrl008/ZdKkSbz99tvMnTuXuXPnAtCiRQsmTpxYoupaafw3/mX9fwmgUaNGgO//S8WV9R5YrdowIrWTfrNF6qi4uDgAZsyYgfHlW5X5U50dpPfs2XPE4/4bGv9rOOGEE474GsoqwVmWpUuXsnnzZlq0aMEHH3zAySefTFJSEjabDeCIN0SHc6Tgyn9TV1FV9X5ERERw4YUXAn8FE9u2bePbb78lPj6+1CChadOmvPrqq4Hu2FOnTqVXr16sXbuWc889l++///6oXmNxJ554YmCb3NKlSwPHP/30U7Kzs+nfvz+vv/46ffv2pV69eoEbuor+/R3t58VqtXLLLbewceNGtm7dyhtvvMHIkSM5dOgQU6dO5fbbbz/Gd8D3rfg777xDkyZN+PLLL5k1a1aJeQMUFBQcce7+8qj+G+LDfaNe2o10efjndO+99x5xPsVL2WZkZLBixQp27tzJ7NmzGTVqFBEREcyYMYMrrrgi6Nz69evzzDPPsGfPHn766SeeffZZBg8ezK+//so111xz2DK7xee6e/fuMs/xr64cKdASqQsUWIjUUf5vnVevXh3imQQrq66//3ijRo1ISEgA/noN69atw+v1Vuo8/DfePXv2LPUb5WPZM++/aSsriDrSN+Jlqcr3w78q4Q8s3nnnHYwxnHvuuURHR5f5uIiICPr27ctdd93FDz/8wMiRI/F4PLz66quVNrdWrVoBvhtnP//fX//+/UvdwlLRv7/K+Ly0bNmSK6+8knfeeYcPP/wQgFdffbVS/q7i4uK4//77AV+fFI/HA0BiYmIg12nNmjXlvl67du0AWLlyZZnn+Lc0VVRlvJepqalccsklzJw5k++//x6r1cpHH33Ezp07S5xrsVg4/vjjGTt2LF999VVgO59/detw/O/DunXryvwiwP+++s8VqcsUWIjUUeeddx7ga9z0xx9/hHg2f3nllVdwuVwljv/9738HfNty/Nq2bUvnzp3Zt28fb775ZqXOw3+zXFpjOLfbHUj+Pdxjy9pu5L8R/uGHH0qMHTx4sESSdHlV5ftx4okn0rx5c7Zs2cLSpUsDAcall15aoev069cP4LB5K0Xt3bu3zBs6P3/OQ9u2bQPHDvf398cff/DKK6+U6/n9Kvvz4n8f8vPzyc7OPubrga8xXWpqKlu2bAn6HTr//PMBDvs7W5w/B2Tjxo189913Jca//vrrw+ZXHM5ZZ52F3W7nk08+CeRyHIuOHTsGtkCV5/eqIr+DJ554IjExMWzbti2wlaqoH3/8ke+++w6LxcLpp59ewZmL1D4KLETqqF69enHxxRfzxx9/cPrpp5foyOzxeFi4cCGXX355qTf6VeWPP/5g1KhRge1Axhj+/ve/88EHH2Cz2bjtttuCzp82bRoWi4WbbrqJmTNnBqra+P3vf//j0UcfDVTGKa9+/foRERHBt99+G3ST7nQ6ufzyyw/bidofOJRVeWnw4MFERUXx448/8vLLLweO79+/n6uvvvqYblyr6v2wWCyMHDkS8H0jvmLFCpKTk0u9mXr66ad55plnSrxHv/32GzNnzgQotapVad5++22OP/54ZsyYUeJ92b9/Pw888ABvv/02ANdcc01g7KSTTgLgvffe48svvwwc37lzJxdccEGJ9+VIjubzsnbtWv72t7/xww8/BAVHLpeLRx99FPDt909KSqrQXMricDi45ZZbAJgyZUrgOe+66y4aNGjAG2+8wW233Vai4/S+fft49dVXeeSRRwLHEhMTA9WMMjIy2LBhQ2Bs7dq1XHXVVURGRh7VPNPS0hg3bhxut5uhQ4eWqOhljGHp0qXccMMNgapJOTk5jBw5koULFwat8Hg8Hp577jmys7OJjY2lffv2AMyaNYuHH364xJa/P/74I9Ahvjy/gwkJCdxwww0A3HzzzUF/71u2bOGqq64CfNXCyipYIVKnVErRWhEJW4drkHfgwAFz+umnB8abN29u+vbta7p06WKio6MDx4v2lSirx4LfkXo0+GvcF699X7zzdnx8fKBbs38ejz32WKnXfOGFFwLddOPj403Pnj1Nr169TKNGjQKPnT59etBjynpPiho/fnzQe9OzZ08THR1tIiMjzfTp08tspPbQQw8FGoR1797dDBw40AwcODDQmdqYv7p6A6ZJkyaBazdq1MhMnDjxsH0synrvj+X9KI8VK1YE9ZO44YYbSj3vlltuCZzTsmVL06dPH9OhQ4fAnDp37lzuJnfPPPNM0HMed9xxpk+fPoGu7v7j48ePL/HYCy+8MDDepk0bc/zxxwcaBPqvW7zZ3OEa5FX08/LTTz8FjtWrV8/06NHDdO/ePdAB2263BzVOO5IjNcgzxtd/Ij4+vkTfhUWLFpnk5GQDfzW37Nu3r2nVqlWgS/sll1wSdC2n02mOP/54A77O2127djVdunQxFovF9OrVK9Aw8M033wx6XFmf8aLcbre54oorAu9Pamqq6dOnj+nWrVtg/oBZt26dMcaY7OzswLHY2FjTrVs306tXr8BrslgsZsaMGYHrP/3000Gfr969ewd1SW/SpIn59ddfg+Z0uM7bgwcPDlyvY8eOplu3boHf527duh2283ZZyvP/IJGaRr/RIrXc4QILY3zNqGbNmmWGDh1qkpOTTWRkpGncuLHp27evueuuu8zSpUuDzq/qwGLBggXm+++/N2eccYapV6+eiY6ONv369TMffPDBYV/nqlWrzHXXXWdatWploqKiTGJiounUqZO59NJLzb/+9a8SnZ7L84+61+s1zzzzjOnQoYOx2+0mOTnZnH322WbJkiWHvXEoKCgwDz74oGnfvr1xOByB5yp+w/Liiy+ajh07GrvdblJSUkxGRobZtm3bERvkHSmwOJr3o7w6duwYeD3ffPNNqeesW7fOTJw40Zx88smmSZMmxm63m0aNGpl+/fqZ559/3uTl5ZX7+QoKCsxXX31l7rjjDjNgwADTvHlzY7fbTUxMjGnbtq258sory5yHy+Uy999/v2nZsqWJjIw0qampZuTIkWb9+vWBz0VFAgtjKvZ5yc3NNTNmzDAXXXSRadu2rYmLizNxcXGmY8eO5v/+7/9KdP0+kvIEFsb8FRD37t076Pju3bvNvffea7p162bi4uJMdHS0adOmjTnjjDPM3//+d5OVlVXiWjk5OWb8+PGB971FixbmtttuMwcOHAgEbsUbx5UnsPD7+OOPzbnnnmtSU1NNZGSkSUlJMT179jQ333yzWbhwofF4PMYYX3PNt956y2RkZJgOHTqYxMREEx0dbdq1a2euuOIKs2LFiqDr/vbbb2batGnm9NNPN82bNzdRUVEmKSnJ9OjRwzzyyCMmOzu7xFzKCiyM8f0ePvvss6ZXr14mNjbWREdHmy5duphHHnmk1M+SAgupqyzGHGHzqohINRg0aBCZmZksWLCAQYMGhXo6InIEXbp0YfXq1fz000+BxpgiUrcpx0JEREQq5IcffmD16tXUq1fvqJseikjto8BCRERESjVhwoQSXdqXLl3KxRdfDMC111571EncIlL7aCuUiIQFbYUSCT/+HiCpqak0a9aM3bt38+uvvwK+SlkLFiwIasInInWbVixERESkVNOmTWPgwIGAr6ngH3/8Qc+ePZk2bRqZmZkKKkQkiFYsRERERETkmGnFQkREREREjllEqCdQk3i9Xnbs2EF8fHxg36mIiIiISG1ljOHAgQOkpaVhtR5+TUKBRQXs2LGDZs2ahXoaIiIiIiLVatu2bTRt2vSw5yiwqID4+HjA98YmJCSEeDYiIiIiIlUrJyeHZs2aBe6DD0eBRQX4tz8lJCQosBARERGROqM8aQBK3hYRERERkWOmwEJERERERI6ZAgsRERERETlmyrGoAh6PB7fbHeppiIStyMhIbDZbqKchIiIilUiBRSUyxpCVlcX+/ftDPRWRsFevXj1SU1PVE0ZERKSWUGBRifxBRUpKCjExMbphEimFMYa8vDx2794NQOPGjUM8IxEREakMCiwqicfjCQQVSUlJoZ6OSFiLjo4GYPfu3aSkpGhblIiISC2g5O1K4s+piImJCfFMRGoG/2dF+UgiIiK1gwKLSqbtTyLlo8+KiIhI7RLywGL69Ol07do10M26f//+fPrpp4Dvm8y77rqLLl26EBsbS1paGldeeSU7duwIuobL5WLMmDEkJycTGxvLiBEj2L59e9A52dnZZGRkkJiYSGJiIhkZGUqyFhERERGpJCEPLJo2bcrUqVP58ccf+fHHHznllFM455xzWLNmDXl5eSxfvpz777+f5cuX88EHH7Bx40ZGjBgRdI1x48YxZ84cZs+ezaJFi8jNzWX48OF4PJ7AOZdddhkrVqxg/vz5zJ8/nxUrVpCRkVHdL1dEREREpHYyYah+/fpm5syZpY4tXbrUAObXX381xhizf/9+ExkZaWbPnh045/fffzdWq9XMnz/fGGPM2rVrDWCWLFkSOOe7774zgFm/fn255+V0Og1gnE5nibH8/Hyzdu1ak5+fX+7r1VUvvfSSGThwoImPjzeAyc7OLnHOvn37zBVXXGESEhJMQkKCueKKK0qct3TpUnPKKaeYxMREU69ePXP66aebn376qdTn3LRpk4mLizOJiYlHnF+LFi0MEPRz1113Bcb37t1rhg4daho3bmzsdrtp2rSpuemmm0r9vagq119/vQHM008/HTi2devWEvP2/7z33ntlXuvBBx8scX6jRo2Czinruo899thRvwZ9ZkRERMLf4e5/iwv5ikVRHo+H2bNnc/DgQfr371/qOU6nE4vFQr169QBYtmwZbrebIUOGBM5JS0ujc+fOLF68GIDvvvuOxMRE+vbtGzinX79+JCYmBs4pjcvlIicnJ+hHjl1eXh7Dhg1jwoQJZZ5zpBWmAwcOMHToUJo3b87333/PokWLSEhIYOjQoSWSgd1uN5deeiknnXRSuef40EMPsXPnzsDPfffdFxizWq2cc845fPjhh2zcuJHXX3+dL7/8kv/7v/+rwLvgyzH45ZdfKvQYgP/85z98//33pKWlBR1v1qxZ0Jx37tzJpEmTiI2N5YwzzjjsNTt16hT0uFWrVgWNF7/uq6++isVi4YILLqjw/EVERKR2Cotys6tWraJ///4cOnSIuLg45syZQ8eOHUucd+jQIe6++24uu+wyEhISAF/vCLvdTv369YPObdSoEVlZWYFzUlJSSlwvJSUlcE5ppkyZwqRJk47lpYW1N998k1tvvZUdO3bgcDgCxy+44AJiY2N58803q+R5x40bB8DChQtLHV+3bh3z589nyZIlgWBwxowZ9O/fnw0bNtC+fXs2bNhAdnY2Dz30EM2aNQPgwQcfpGvXrvz222+0bt06cL377ruPDh06cOqppx42kCwqPj6e1NTUUsfq16/PDTfcEPhzixYtuPHGG3n88cfLde1j8fvvv3PzzTfz2WefcdZZZwWN2Wy2EnOeM2cOl1xyCXFxcYe9bkRERJmvFygxNnfuXAYPHkyrVq0A39/lkCFD+O9//xsI4J588kmmTJnCqlWr1KtCRESkDgiLFYv27duzYsUKlixZwg033MBVV13F2rVrg85xu92MHDkSr9fL3//+9yNe0xgTVHWmtAo0xc8p7p577sHpdAZ+tm3bVv4XZQzs3x+6H2OOOMWLLroIj8fDhx9+GDi2d+9ePvroI6655poyH9epUyfi4uLK/OnUqVP53qMylGeFqX379iQnJ/PKK69QUFBAfn4+r7zyCp06daJFixaBx3311Vf861//4sUXX6zQHKZNm0ZSUhLHH388jz76KAUFBWWeu2PHDj744AMGDhxYwVdaMV6vl4yMDO64445yvcfLli1jxYoVjBo16ojnbtq0ibS0NI477jhGjhzJ//73vzLP3bVrFx9//HHQdQcNGsS4cePIyMjA6XTy888/c++99zJjxgwFFSIiInVEWKxY2O122rRpA0CvXr344YcfePbZZ3nppZcAX1Bx8cUXs3XrVr766qvAagX4vkktKCggOzs7aNVi9+7dDBgwIHDOrl27Sjzvnj17aNSoUZnzcjgcQd/kV4jTCcVWUapVdjb8uV2sLNHR0Vx22WW89tprXHTRRQDMmjWLpk2bMmjQoDIf98knnxy290BkZOTRzDigPCtM8fHxLFy4kHPOOYeHH34YgHbt2vHZZ58REeH7tf7jjz+4+uqrefvtt4N+Z47klltuoUePHtSvX5+lS5dyzz33sHXrVmbOnBl03qWXXsrcuXPJz8/n7LPPLjFe2aZNm0ZERARjx44t1/mvvPIK6enpgc9BWfr27cubb75Ju3bt2LVrF4888ggDBgxgzZo1pTZ7fOONN4iPj+f8888POv7II4/w5Zdfcv3117NmzRoyMjI477zzyv8CRUREJIjXa1izI4d9eQU0iLHTKS0BqzV8y7WHRWBRnDEGl8sF/BVUbNq0iQULFpS40enZsyeRkZF88cUXXHzxxYBvP/jq1at57LHHAOjfvz9Op5OlS5fSp08fAL7//nucTucRb7pqu9GjR9O7d29+//13mjRpwmuvvcbVV1992JWcoisCVeVIK0z5+flce+21nHDCCbzzzjt4PB6eeOIJzjzzTH744Qeio6MZPXo0l112GSeffHKFnvvWW28N/HfXrl2pX78+F154YWAVw+/pp5/mwQcfZMOGDUyYMIHbbrvtsKtpZ5xxBt98803QsU6dOgW91tzc3FIfu2zZMp599lmWL19erv4P+fn5/POf/+T+++8/4rlF8y+6dOlC//79ad26NW+88Qa33XZbifNfffVVLr/8cqKiooKO2+123n77bbp27UqLFi145plnjvjcIiIiUrrFm/fy4oJNrNmRQ0GhwR5hoVNaAjcNbsuANsmhnl6pQh5YTJgwgTPOOINmzZpx4MABZs+ezcKFC5k/fz6FhYVceOGFLF++nI8++giPxxP4xrpBgwbY7XYSExMZNWoUt99+O0lJSTRo0IDx48fTpUsXTjvtNADS09MZNmwYo0ePDqyCXH/99QwfPpz27duH7LWHg+7du9OtWzfefPNNhg4dyqpVq5g3b95hH9OpUyd+/fXXMsdbtGjBmjVrjnpO5Vlh+uc//8kvv/zCd999h9VqDRyrX78+c+fOZeTIkXz11Vd8+OGHPPHEE4AvMPF6vURERPDyyy9z7bXXlms+/fr1A2Dz5s1BgUVqaiqpqal06NCBpKQkTjrpJO6///4yt/7MnDmT/Pz8wJ/btm3LJ598QpMmTY44h2+++Ybdu3fTvHnzwDGPx8Ptt9/OM888UyIJ/P333ycvL48rr7yyXK+xqNjYWLp06cKmTZtKnceGDRt49913S32sf6vavn372LdvH7GxsRV+fhERkbpu8ea93PTP5ezPc+Pf3J7nhsVb9rF253JevKxHWAYXIQ8sdu3aRUZGBjt37iQxMZGuXbsyf/58Tj/9dH755ZfA/v/jjz8+6HELFiwIbNd5+umniYiI4OKLLyY/P59TTz2V119/HZvNFjh/1qxZjB07NlA9asSIEbzwwgtV98ISE33bkUIlMbHcp1533XU8/fTT/P7775x22mmBZOiyVPVWqPKsMOXl5WG1WoO+vff/2ev1Ar5cjaK9TObOncu0adNYvHhxuW7m/X766SeAw+YKmD9zWvwrbaUp7TlbtGhBy5YtjziHjIyMQKDsN3ToUDIyMkrNh3nllVcYMWIEDRs2POK1i3O5XKxbt67UKlqvvPIKPXv2pFu3biXGtmzZwq233sqMGTN47733uPLKK/nvf/8bCPxERETkyLxew73/WUV2Xsl7LQNk57m59z+r+O9tg8JuW5TFmHJk+QoAOTk5JCYm4nQ6S+zZP3ToEFu3buW4444rsUUk3OXk5NC4cWMKCwt58803ueSSS6r0+bKyssjKyuLHH39k9OjRfP3118THx9O8eXMaNGgA+Lbn7NixI2iFqUWLFoHVlPXr13P88cdz7bXXMmbMGLxeL1OnTmXevHmsW7eu1CDg9ddfZ9y4cUEd15cuXRq4AW7SpAnfffcdS5YsYfDgwSQmJvLDDz9w66230qtXL+bOnQv4Aqtdu3bRu3dv4uLiWLt2LXfeeSf16tVj0aJF5X4fLBYLW7duLVdgUZqWLVsybty4QJUtv82bN9OuXTs++eQThg0bVuJxp556Kueddx4333wzAOPHj+fss8+mefPm7N69m0ceeYTMzExWrVoVtO3N/3vy5JNPliit6/F4OOmkk2jcuDH//ve/ycrKokuXLtx5553ccccdpc6/Jn9mREREqspPv2Vz/t8XB1Yqiu6A9t+1W4APbhxA9+ZVn897uPvf4vRVopCQkMAFF1xAXFwc5557bpU/3z/+8Q+6d+/O6NGjATj55JPp3r17UHWqWbNm0aVLF4YMGcKQIUPo2rUrb731VmC8Q4cOzJs3j5UrV9K/f39OOukkduzYwfz58ytUhSgvL48NGzYEVmAcDgfvvvsugwYNomPHjjzwwAOMHj2ad955J/CY6OhoZsyYwYknnkh6ejrjxo1j+PDhfPTRR8f61lSKV199lSZNmgT1dilqy5Yt7N27N/Dn7du3c+mll9K+fXvOP/987HY7S5YsKZFLM3v2bIwxXHrppSWu+eijj/LLL7/w8ssvA75tYjNnzuS+++5jxYoVlffiREREarlPV2eVGlQU/bP587xwoxWLCqitKxYAp59+Ounp6Tz33HOhnorUETX9MyMiIlIV7p+zmre+9+WyllavxX/nntG3BQ+f17nK56MVCym3ffv2MXv2bL766ituuummUE9HREREpE47vnm9Sj2vOoU8eVtCq0ePHmRnZzNt2rQ6XyFLREREJNTO6ZbGgx+uJtflwRhfPgUWwBDYIhXnsHFOt7TQTbIMCizquOJlSkVEREQkdCIirNxyalumfroejz+YKJK4YLPALae2JSIi/DYeKbAQEREREQkjo09uDcCLC7aQc8jtW7mwQEJUJDcNbh0YDzcKLEREREREwszok1tzzYDjmLdyJ7/vz6NJvRjO7to4LFcq/BRYVDJ/czYROTx9VkRERA7ParXQJiWOBnF2GsTYw64hXnEKLCqJ3W7HarWyY8cOGjZsiN1uD+oKLSI+xhgKCgrYs2cPVqsVu90e6imJiIiEncWb9zI9cwtbdufi9hgibRZap8Rxw8DWDGiTHOrplUp9LCrgSHV8CwoK2LlzJ3l5eSGYnUjNEhMTQ+PGjRVYiIiIFLN4814mzFlFrquQ+jF27DYrBR4v2Xlu4hw2Jp/XpdqCi4r0sdCKRSWy2+00b96cwsJCPB5PqKcjErZsNhsRERFa1RMRESnG6zVMz9xCrquQ1ISowL+VUVYbqQlWsnJcTM/cQr9WSWG3NUqBRSWzWCxERkYSGRkZ6qmIiIiISA2zZkcOW3bnUj+m5LZ6i8VCvZhItuzOZc2OHLo0TQzRLEsXvmnlIiIiIiJ1zL68Atweg91W+m26w2bF7TXsyyuo5pkdmVYsRERERERK4fUa1uzIYV9eAQ1i7HRKS6jy7UcNYuxE2iwUeLxEWW0lxl0eL5FWCw1iwi9HUYGFiIiIiEgxoarK1CktgdYpcazbeYDUBGvQdihjDPvz3KQ3jqdT2uETqUNBW6FERERERIrwV2VatzOHWEcEKfEOYh0RrNt5gAlzVrF4894qe26r1cINA1sT57CRleMi3+3B6zXkuz1k5biIc9i4YWDrsEvcBgUWIiIiIiIBxasyRUXasFotREXaSE1wkOvyMD1zC15v1XVsGNAmmcnndSG9cTx5rkJ257rIcxWS3ji+WkvNVpS2QomIiIiI/ClcqjINaJNMv1ZJ1Z7jcSwUWIiIiIiI/Kk8VZmc1VSVyWq1hF1J2cPRVigRERERkT8VrcpUmnCuyhRqCixERERERP7kr8qUnefGmOA8Cn9VptYpcWFZlSnUFFiIiIiIiPypJldlCjUFFiIiIiISlrxew6rtTjI37mHVdmeVVmIqqqZWZQo1JW+LiIiISNgJVYM6v5pYlSnULKb45jEpU05ODomJiTidThIStK9OREREpCr4G9TlugqpH2PHbrNS4PGSnecmzmHTqkE1qsj9r7ZCiYiIiEjYCIcGdXJ0FFiIiIiISNioSIM6CS8KLEREREQkbJSnQZ27mhrUScUosBARERGRsKEGdTWXAgsRERERCRtqUFdzKbAQERERkbChBnU1lwILEREREQkralBXM6lBnoiIiIiEHTWoq3kUWIiIiIhIWLJaLXRpmhjqaUg5aSuUiIiIiIgcMwUWIiIiIiJyzBRYiIiIiIjIMVNgISIiIiIix0yBhYiIiIiIHDMFFiIiIiIicswUWIiIiIiIyDFTYCEiIiIiIsdMgYWIiIiIiBwzBRYiIiIiInLMFFiIiIiIiMgxiwj1BERERERESuP1GtbsyGFfXgENYux0SkvAarWEelpSBgUWIiIiIhJ2Fm/ey/TMLWzZnYvbY4i0WWidEscNA1szoE1yqKcnpdBWKBEREREJK4s372XCnFWs25lDrCOClHgHsY4I1u08wIQ5q1i8eW+opyilUGAhIiIiImHD6zVMz9xCrquQ1IQooiJtWK0WoiJtpCY4yHV5mJ65Ba/XVMtcVm13krlxD6u2O6vlOWsybYUSERERkbCxZkcOW3bnUj/GjsUSnE9hsVioFxPJlt25rNmRQ5emiVU2D23FqjitWIiIiIhI2NiXV4DbY7DbSr9NddisuL2GfXkFVTYHbcU6OgosRERERCRsNIixE2mzUODxljru8niJtFpoEGOvkucPp61YNY0CCxEREREJG53SEmidEkd2nhtjgm/ejTHsz3PTOiWOTmkJVfL8FdmKJcEUWIiIiIhI2LBaLdwwsDVxDhtZOS7y3R68XkO+20NWjos4h40bBrausn4W4bAVq6ZSYCEiIiIiYWVAm2Qmn9eF9Mbx5LkK2Z3rIs9VSHrjeCaf16VKk6dDvRWrJlNVKBEREREJOwPaJNOvVVK1d972b8Vat/MAqQnWoO1Q/q1Y6Y3jq2wrVk2mwEJEREREwpLVaqnSkrJlPecNA1szYc4qsnJc1IuJxGGz4vJ42Z/nrvKtWEV5vabaA6tjocBCRERERKQI/1Ysfx8Lp9cQabWQ3ji+2vpY1MQ+GhZTPN1eypSTk0NiYiJOp5OEBC1/iYiIiNRmoVox8PfROHDITYw9AqvFgtcY8go8xEdFVHmeSVEVuf/VioWIiIiISClCsRXL30dj38ECPF5DzqFDGAMWC9htVtwe33i/Vklhty1KVaFERERERMLEmh05rN3hJN/t4VChF6vFQoTVgtVi4VChl3x3IWt3OMOyj4ZWLEREREREwsTegy5yDhXiNYZI619VqSxApBXcXi85hwrZe9AV2omWQisWIiIiIiJhYv9BN16vwWqxlNr522qx4PUa9h90h2iGZdOKhYiIiIhIKUKRvF0/JhKr1Rc8GKvBQpE+Ghhf0GG1UD8mskrncTRCvmIxffp0unbtSkJCAgkJCfTv359PP/00MG6MYeLEiaSlpREdHc2gQYNYs2ZN0DVcLhdjxowhOTmZ2NhYRowYwfbt24POyc7OJiMjg8TERBITE8nIyGD//v3V8RJFREREaiSv17Bqu5PMjXtYtd2J11t3ioku3ryXq15byt/e+pHx7/3M3976kateW8rizXur9HmT4hwkREVisVgo9Bi8xvgCCmMo9BgsFgsJUZEkxTmqdB5HI+SBRdOmTZk6dSo//vgjP/74I6eccgrnnHNOIHh47LHHeOqpp3jhhRf44YcfSE1N5fTTT+fAgQOBa4wbN445c+Ywe/ZsFi1aRG5uLsOHD8fj8QTOueyyy1ixYgXz589n/vz5rFixgoyMjGp/vSIiIiI1QahurMOBv9zrup05xDoiSIl3EOuIYN3OA0yYs6pK34NOaQl0TEsg1mHDEWENBBReY3BEWIl12OiYlhCWnb/Dso9FgwYNePzxx7n22mtJS0tj3Lhx3HXXXYBvdaJRo0ZMmzaNv/3tbzidTho2bMhbb73FJZdcAsCOHTto1qwZn3zyCUOHDmXdunV07NiRJUuW0LdvXwCWLFlC//79Wb9+Pe3bty/XvNTHQkREROqCcOqjUN28XsNVry1l3c4cUhOigvIcjDFk5bhIbxzPG9f0qbJtUf73P9dVSHSkDYsFjIF8t4c4R/j2sQj5ikVRHo+H2bNnc/DgQfr378/WrVvJyspiyJAhgXMcDgcDBw5k8eLFACxbtgy32x10TlpaGp07dw6c891335GYmBgIKgD69etHYmJi4JzSuFwucnJygn5EREREarOifRQOub1k5Rzi9/35ZOUc4pDbw76DbqZnbqm126LW7Mhhy+5c6sfYS02erhcTyZbduVVa7tXf+Tu9cQIeryHf7cXjNaQ3TgjroC4skrdXrVpF//79OXToEHFxccyZM4eOHTsGbvobNWoUdH6jRo349ddfAcjKysJut1O/fv0S52RlZQXOSUlJKfG8KSkpgXNKM2XKFCZNmnRMr01ERESkJinaR8FrIMJq8X1jDn/2VfAG+ihUd/O46rAvrwC3x2C3lf79u8Nmxek17MsrqNJ5DGiTTL9WSSHp/H20wiKwaN++PStWrGD//v38+9//5qqrriIzMzMwXjxaNMaUOFZc8XNKO/9I17nnnnu47bbbAn/OycmhWbNmR3w9IiIiIjVVTe6jUBkaxNiJtFko8HiJstpKjLs8XiKtFhrE2Kt8LqHo/H0swmIrlN1up02bNvTq1YspU6bQrVs3nn32WVJTUwFKrCrs3r07sIqRmppKQUEB2dnZhz1n165dJZ53z549JVZDinI4HIFqVf4fERERkdqsJvdRqAyd0hJonRJHdp6b4qnIxhj257lpnRIXlsnToRYWgUVxxhhcLhfHHXccqampfPHFF4GxgoICMjMzGTBgAAA9e/YkMjIy6JydO3eyevXqwDn9+/fH6XSydOnSwDnff/89TqczcI6IiIiIFOujQLEb6zDvo1AZrFYLNwxsTZzDRlaOy7clzGvId3vIynER57Bxw8DW1bMlyRiYNw8uvhiKVDsNVyHfCjVhwgTOOOMMmjVrxoEDB5g9ezYLFy5k/vz5WCwWxo0bx+TJk2nbti1t27Zl8uTJxMTEcNlllwGQmJjIqFGjuP3220lKSqJBgwaMHz+eLl26cNpppwGQnp7OsGHDGD16NC+99BIA119/PcOHDy93RSgRERGRusDfR8GZ76bQY7BZCVQl8njDu49CZfEnT0/P3MKW3bk4vYZIq4X0xvHcMLB19SRP//QT3H47LFjg+/MZZ8A111T98x6DkAcWu3btIiMjg507d5KYmEjXrl2ZP38+p59+OgB33nkn+fn53HjjjWRnZ9O3b18+//xz4uPjA9d4+umniYiI4OKL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",
      "text/plain": [
       "<Figure size 800x600 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(8, 6))\n",
    "sns.regplot(\n",
    "    x='当日最高气温(℃)',\n",
    "    y='销售额(元)',\n",
    "    data=uploaded_data,\n",
    "    ci=None,\n",
    "    line_kws={\"color\": \"red\", \"label\": f\"y = {intercept:.2f} + {slope:.2f}x\"}\n",
    ")\n",
    "plt.title('Temperature vs Sales Regression', fontsize=16)\n",
    "plt.xlabel('Max Temperature (℃)', fontsize=12)\n",
    "plt.ylabel('Sales (Yuan)', fontsize=12)\n",
    "plt.legend()\n",
    "plt.tight_layout()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9b47f9df",
   "metadata": {},
   "source": [
    "### 🤔 思考与讨论"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "84324aff",
   "metadata": {},
   "source": [
    "**Q1：你认为随着气温上升，奶茶店的销售额是否会一定增加？图中体现了什么样的趋势？**\n",
    "\n",
    "**Q2：除了气温，还有哪些因素可能会影响奶茶店的销量？如何将它们也加入模型？**"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5174532d",
   "metadata": {},
   "source": [
    "# 作业：定价与销量预测"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "19185eb7",
   "metadata": {},
   "source": [
    "在本实验中，我们继续使用一元线性回归，探索“价格”与“销量”之间的关系。\n",
    "通过分析定价策略对销量的影响，帮助优化商业决策。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7847999c",
   "metadata": {},
   "source": [
    "### 第一步：导入所需的库"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "b964c516",
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.linear_model import LinearRegression\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "43864bd7",
   "metadata": {},
   "source": [
    "### 第二步：读取数据"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e2b4eb6f",
   "metadata": {},
   "source": [
    "我们将读取 `pricing_data.csv` 文件，其中包含不同价格下的奶茶销售量数据。\n",
    "先读取并查看前几行数据："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "6221e8eb",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Price</th>\n",
       "      <th>Sales</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>43.71</td>\n",
       "      <td>653</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>95.56</td>\n",
       "      <td>227</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>75.88</td>\n",
       "      <td>396</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>63.88</td>\n",
       "      <td>429</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>24.04</td>\n",
       "      <td>801</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Price  Sales\n",
       "0  43.71    653\n",
       "1  95.56    227\n",
       "2  75.88    396\n",
       "3  63.88    429\n",
       "4  24.04    801"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "file_path = 'data/pricing_data.csv'\n",
    "uploaded_data = pd.read_csv(file_path, encoding='gbk')\n",
    "uploaded_data.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6437aa10",
   "metadata": {},
   "source": [
    "### 第三步：准备特征与目标变量"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "44ce92ef",
   "metadata": {},
   "source": [
    "选择价格作为自变量 `X`，销售额作为因变量 `y`。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "06e78ba8",
   "metadata": {},
   "outputs": [],
   "source": [
    "X = uploaded_data[['Price']]\n",
    "y = uploaded_data['Sales']"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "78e3c542",
   "metadata": {},
   "source": [
    "### 第四步：训练线性回归模型"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "710cf509",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<style>#sk-container-id-3 {\n",
       "  /* Definition of color scheme common for light and dark mode */\n",
       "  --sklearn-color-text: #000;\n",
       "  --sklearn-color-text-muted: #666;\n",
       "  --sklearn-color-line: gray;\n",
       "  /* Definition of color scheme for unfitted estimators */\n",
       "  --sklearn-color-unfitted-level-0: #fff5e6;\n",
       "  --sklearn-color-unfitted-level-1: #f6e4d2;\n",
       "  --sklearn-color-unfitted-level-2: #ffe0b3;\n",
       "  --sklearn-color-unfitted-level-3: chocolate;\n",
       "  /* Definition of color scheme for fitted estimators */\n",
       "  --sklearn-color-fitted-level-0: #f0f8ff;\n",
       "  --sklearn-color-fitted-level-1: #d4ebff;\n",
       "  --sklearn-color-fitted-level-2: #b3dbfd;\n",
       "  --sklearn-color-fitted-level-3: cornflowerblue;\n",
       "\n",
       "  /* Specific color for light theme */\n",
       "  --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, white)));\n",
       "  --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-icon: #696969;\n",
       "\n",
       "  @media (prefers-color-scheme: dark) {\n",
       "    /* Redefinition of color scheme for dark theme */\n",
       "    --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, #111)));\n",
       "    --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-icon: #878787;\n",
       "  }\n",
       "}\n",
       "\n",
       "#sk-container-id-3 {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "#sk-container-id-3 pre {\n",
       "  padding: 0;\n",
       "}\n",
       "\n",
       "#sk-container-id-3 input.sk-hidden--visually {\n",
       "  border: 0;\n",
       "  clip: rect(1px 1px 1px 1px);\n",
       "  clip: rect(1px, 1px, 1px, 1px);\n",
       "  height: 1px;\n",
       "  margin: -1px;\n",
       "  overflow: hidden;\n",
       "  padding: 0;\n",
       "  position: absolute;\n",
       "  width: 1px;\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-dashed-wrapped {\n",
       "  border: 1px dashed var(--sklearn-color-line);\n",
       "  margin: 0 0.4em 0.5em 0.4em;\n",
       "  box-sizing: border-box;\n",
       "  padding-bottom: 0.4em;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-container {\n",
       "  /* jupyter's `normalize.less` sets `[hidden] { display: none; }`\n",
       "     but bootstrap.min.css set `[hidden] { display: none !important; }`\n",
       "     so we also need the `!important` here to be able to override the\n",
       "     default hidden behavior on the sphinx rendered scikit-learn.org.\n",
       "     See: https://github.com/scikit-learn/scikit-learn/issues/21755 */\n",
       "  display: inline-block !important;\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-text-repr-fallback {\n",
       "  display: none;\n",
       "}\n",
       "\n",
       "div.sk-parallel-item,\n",
       "div.sk-serial,\n",
       "div.sk-item {\n",
       "  /* draw centered vertical line to link estimators */\n",
       "  background-image: linear-gradient(var(--sklearn-color-text-on-default-background), var(--sklearn-color-text-on-default-background));\n",
       "  background-size: 2px 100%;\n",
       "  background-repeat: no-repeat;\n",
       "  background-position: center center;\n",
       "}\n",
       "\n",
       "/* Parallel-specific style estimator block */\n",
       "\n",
       "#sk-container-id-3 div.sk-parallel-item::after {\n",
       "  content: \"\";\n",
       "  width: 100%;\n",
       "  border-bottom: 2px solid var(--sklearn-color-text-on-default-background);\n",
       "  flex-grow: 1;\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-parallel {\n",
       "  display: flex;\n",
       "  align-items: stretch;\n",
       "  justify-content: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-parallel-item {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-parallel-item:first-child::after {\n",
       "  align-self: flex-end;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-parallel-item:last-child::after {\n",
       "  align-self: flex-start;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-parallel-item:only-child::after {\n",
       "  width: 0;\n",
       "}\n",
       "\n",
       "/* Serial-specific style estimator block */\n",
       "\n",
       "#sk-container-id-3 div.sk-serial {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "  align-items: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  padding-right: 1em;\n",
       "  padding-left: 1em;\n",
       "}\n",
       "\n",
       "\n",
       "/* Toggleable style: style used for estimator/Pipeline/ColumnTransformer box that is\n",
       "clickable and can be expanded/collapsed.\n",
       "- Pipeline and ColumnTransformer use this feature and define the default style\n",
       "- Estimators will overwrite some part of the style using the `sk-estimator` class\n",
       "*/\n",
       "\n",
       "/* Pipeline and ColumnTransformer style (default) */\n",
       "\n",
       "#sk-container-id-3 div.sk-toggleable {\n",
       "  /* Default theme specific background. It is overwritten whether we have a\n",
       "  specific estimator or a Pipeline/ColumnTransformer */\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       "/* Toggleable label */\n",
       "#sk-container-id-3 label.sk-toggleable__label {\n",
       "  cursor: pointer;\n",
       "  display: flex;\n",
       "  width: 100%;\n",
       "  margin-bottom: 0;\n",
       "  padding: 0.5em;\n",
       "  box-sizing: border-box;\n",
       "  text-align: center;\n",
       "  align-items: start;\n",
       "  justify-content: space-between;\n",
       "  gap: 0.5em;\n",
       "}\n",
       "\n",
       "#sk-container-id-3 label.sk-toggleable__label .caption {\n",
       "  font-size: 0.6rem;\n",
       "  font-weight: lighter;\n",
       "  color: var(--sklearn-color-text-muted);\n",
       "}\n",
       "\n",
       "#sk-container-id-3 label.sk-toggleable__label-arrow:before {\n",
       "  /* Arrow on the left of the label */\n",
       "  content: \"▸\";\n",
       "  float: left;\n",
       "  margin-right: 0.25em;\n",
       "  color: var(--sklearn-color-icon);\n",
       "}\n",
       "\n",
       "#sk-container-id-3 label.sk-toggleable__label-arrow:hover:before {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "/* Toggleable content - dropdown */\n",
       "\n",
       "#sk-container-id-3 div.sk-toggleable__content {\n",
       "  max-height: 0;\n",
       "  max-width: 0;\n",
       "  overflow: hidden;\n",
       "  text-align: left;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-toggleable__content.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-toggleable__content pre {\n",
       "  margin: 0.2em;\n",
       "  border-radius: 0.25em;\n",
       "  color: var(--sklearn-color-text);\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-toggleable__content.fitted pre {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-3 input.sk-toggleable__control:checked~div.sk-toggleable__content {\n",
       "  /* Expand drop-down */\n",
       "  max-height: 200px;\n",
       "  max-width: 100%;\n",
       "  overflow: auto;\n",
       "}\n",
       "\n",
       "#sk-container-id-3 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {\n",
       "  content: \"▾\";\n",
       "}\n",
       "\n",
       "/* Pipeline/ColumnTransformer-specific style */\n",
       "\n",
       "#sk-container-id-3 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-label.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator-specific style */\n",
       "\n",
       "/* Colorize estimator box */\n",
       "#sk-container-id-3 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-estimator.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-label label.sk-toggleable__label,\n",
       "#sk-container-id-3 div.sk-label label {\n",
       "  /* The background is the default theme color */\n",
       "  color: var(--sklearn-color-text-on-default-background);\n",
       "}\n",
       "\n",
       "/* On hover, darken the color of the background */\n",
       "#sk-container-id-3 div.sk-label:hover label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "/* Label box, darken color on hover, fitted */\n",
       "#sk-container-id-3 div.sk-label.fitted:hover label.sk-toggleable__label.fitted {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator label */\n",
       "\n",
       "#sk-container-id-3 div.sk-label label {\n",
       "  font-family: monospace;\n",
       "  font-weight: bold;\n",
       "  display: inline-block;\n",
       "  line-height: 1.2em;\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-label-container {\n",
       "  text-align: center;\n",
       "}\n",
       "\n",
       "/* Estimator-specific */\n",
       "#sk-container-id-3 div.sk-estimator {\n",
       "  font-family: monospace;\n",
       "  border: 1px dotted var(--sklearn-color-border-box);\n",
       "  border-radius: 0.25em;\n",
       "  box-sizing: border-box;\n",
       "  margin-bottom: 0.5em;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-estimator.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "/* on hover */\n",
       "#sk-container-id-3 div.sk-estimator:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-estimator.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Specification for estimator info (e.g. \"i\" and \"?\") */\n",
       "\n",
       "/* Common style for \"i\" and \"?\" */\n",
       "\n",
       ".sk-estimator-doc-link,\n",
       "a:link.sk-estimator-doc-link,\n",
       "a:visited.sk-estimator-doc-link {\n",
       "  float: right;\n",
       "  font-size: smaller;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  border-radius: 1em;\n",
       "  height: 1em;\n",
       "  width: 1em;\n",
       "  text-decoration: none !important;\n",
       "  margin-left: 0.5em;\n",
       "  text-align: center;\n",
       "  /* unfitted */\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted,\n",
       "a:link.sk-estimator-doc-link.fitted,\n",
       "a:visited.sk-estimator-doc-link.fitted {\n",
       "  /* fitted */\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "div.sk-estimator:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "div.sk-estimator.fitted:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "/* Span, style for the box shown on hovering the info icon */\n",
       ".sk-estimator-doc-link span {\n",
       "  display: none;\n",
       "  z-index: 9999;\n",
       "  position: relative;\n",
       "  font-weight: normal;\n",
       "  right: .2ex;\n",
       "  padding: .5ex;\n",
       "  margin: .5ex;\n",
       "  width: min-content;\n",
       "  min-width: 20ex;\n",
       "  max-width: 50ex;\n",
       "  color: var(--sklearn-color-text);\n",
       "  box-shadow: 2pt 2pt 4pt #999;\n",
       "  /* unfitted */\n",
       "  background: var(--sklearn-color-unfitted-level-0);\n",
       "  border: .5pt solid var(--sklearn-color-unfitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted span {\n",
       "  /* fitted */\n",
       "  background: var(--sklearn-color-fitted-level-0);\n",
       "  border: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link:hover span {\n",
       "  display: block;\n",
       "}\n",
       "\n",
       "/* \"?\"-specific style due to the `<a>` HTML tag */\n",
       "\n",
       "#sk-container-id-3 a.estimator_doc_link {\n",
       "  float: right;\n",
       "  font-size: 1rem;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  border-radius: 1rem;\n",
       "  height: 1rem;\n",
       "  width: 1rem;\n",
       "  text-decoration: none;\n",
       "  /* unfitted */\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "}\n",
       "\n",
       "#sk-container-id-3 a.estimator_doc_link.fitted {\n",
       "  /* fitted */\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "#sk-container-id-3 a.estimator_doc_link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "#sk-container-id-3 a.estimator_doc_link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "</style><div id=\"sk-container-id-3\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>LinearRegression()</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-3\" type=\"checkbox\" checked><label for=\"sk-estimator-id-3\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow\"><div><div>LinearRegression</div></div><div><a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.6/modules/generated/sklearn.linear_model.LinearRegression.html\">?<span>Documentation for LinearRegression</span></a><span class=\"sk-estimator-doc-link fitted\">i<span>Fitted</span></span></div></label><div class=\"sk-toggleable__content fitted\"><pre>LinearRegression()</pre></div> </div></div></div></div>"
      ],
      "text/plain": [
       "LinearRegression()"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "model=LinearRegression()\n",
    "model.fit(X, y)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f648aaee",
   "metadata": {},
   "source": [
    "### 第五步：查看模型参数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "66b05aef",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "截距: 1007.94, 斜率: -8.15\n"
     ]
    }
   ],
   "source": [
    "intercept = model.intercept_\n",
    "slope = model.coef_[0]\n",
    "print(f\"截距: {intercept:.2f}, 斜率: {slope:.2f}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ac741e74",
   "metadata": {},
   "source": [
    "### 第六步：绘制回归图"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "id": "7b509cae",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAArgAAAIlCAYAAAA+OIuyAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAADERklEQVR4nOzdd1xV9f/A8de97K3sIaIJ7hFuzdLStOHIMi3LkVqWppl75cqVqdkvK5vmSG1a2viallpmGSGaM0UFREBAEJAN9/z++MRlKyCb9/Px6HG753zuuefcw3j74f15v3WapmkIIYQQQghRS+ir+gSEEEIIIYQoTxLgCiGEEEKIWkUCXCGEEEIIUatIgCuEEEIIIWoVCXCFEEIIIUStIgGuEEIIIYSoVSTAFUIIIYQQtYoEuEIIIYQQolaRAFcIIYQQQtQqEuAKIWq0Tz75BJ1OxyeffFLVpyIq2ejRo9HpdISEhFT1qQghqhkJcIUQ1VJISAg6nY4HHnigqk+lUuQEa3n/s7Ozo0OHDqxatYr09PSqPkUhhKgxTKv6BIQQ4nYMHjyYrl274uHhUdWnUi7Gjh1LgwYNMBgMRERE8M033zBr1ix++eUX/ve//1X16VUrK1asYPbs2Xh5eVX1qQghqhkJcIUQNZqDgwMODg5VfRrlZty4cXTt2tX4/LXXXqNt27bs2bOH/fv3c++991bh2VUvHh4eteYfNkKI8iUpCkKIGq24HFydTkevXr2IiYlhzJgxuLq6YmVlRdeuXTlw4ECRx0pKSmLhwoW0atUKKysr6tWrxwMPPMChQ4cKjQ0MDOTFF1+kdevWODg4YGVlRZs2bVi5ciWZmZmFxjdq1IhGjRpx/fp1Jk+ejLe3N6amprfMHXZycuKRRx4xvmdB//zzD0888QQeHh6Ym5vj4+PDpEmTuHbtWpHHe++992jVqhWWlpZ4e3szc+ZM0tLSjJ9XXr169UKn05Gens6CBQvw9fXFzMyMRYsWGcdcunSJcePG0bBhQywsLPDw8GD06NGEhoYWeu+jR48yZMgQ41g3Nze6devGypUr8407f/48zzzzDI0bN8bS0hJnZ2fat2/PtGnT8o27WQ7upk2b6Nq1K7a2ttja2tK1a1c2bdpUaNyBAwfQ6XQsWrSIo0eP0q9fP+zs7HBwcGDw4MGS3ytEDSUzuEKIWuv69evcdddd2Nvb89RTTxEdHc1nn31Gv379CAwMpHXr1saxcXFx3HPPPZw6dYq7776bfv36kZCQwLfffsu9997LF198YQw0AT744AN2797NPffcw0MPPURKSgoHDhxgzpw5BAQE8NVXXxU6n/T0dO677z6SkpIYMGAA5ubmuLm53fI6NE0DwNQ0/4/sXbt2MXToUExMTBg4cCDe3t6cPn2a9evXs2fPHo4cOUL9+vWN4xcsWMCrr76Kh4cHzz33HKampnzxxRecPXv2pu//6KOPcvz4cfr164ejoyN33HEHAEeOHKFfv34kJyczYMAAfH19CQkJ4dNPP+XHH3/kjz/+MI49duwY3bt3x8TEhEGDBuHj48P169c5deoUH3zwAbNnzwYgIiKCzp07k5yczMMPP8ywYcO4ceMG58+f56233mLNmjW3/Lxefvll1q1bh5eXF2PHjkWn0/HVV18xevRojh8/ztq1awu95u+//+b111+nV69ejB8/nqCgIL755htOnDjByZMnsbS0vOX7CiGqEU0IIaqhS5cuaYDWr1+/m47buHGjBmgbN27Mtx3QAG3ChAladna2cfuHH36oAdr48ePzjR8+fLgGaB9//HG+7VFRUZq3t7fm4uKipaamGreHhIRoWVlZ+cYaDAZtzJgxGqAdOnQo3z4fHx8N0Pr27aulpKQUuo5Ro0ZpgPbHH3/k2x4dHa15eHhogPbXX38Zt8fGxmr29vZagwYNtNDQ0Hyv2bZtmwZoL774onHbv//+q5mYmGgNGzbUYmNjjduTkpK0Vq1aaYDWs2fPfMfp2bOnBmh33nmndu3atXz7MjIytEaNGml2dnbasWPH8u377bffNBMTE61///7GbVOnTtUA7dtvvy107XnP5//+7/80QHvzzTcLjYuJicn3POczu3TpknHbr7/+qgFaixYttOvXrxu3X79+XWvevLkGaL/99ptx+/79+41fKzt27Mh3/BEjRmiAtn379kLnIoSo3iRFQQhRa9nY2PDaa6+h1+f+qBs1ahSmpqYEBAQYt8XGxvLZZ5/Ru3dvnnnmmXzHcHNzY8aMGcTExLBv3z7jdh8fH0xMTPKN1el0TJw4ESDf2Lxef/11rKysij3nDz/8kEWLFrFw4ULGjRtH8+bNiYyM5MUXX6RTp07GcZs3byYxMZEVK1bQsGHDfMd48sknad++PTt27DBu2759O9nZ2UybNg0nJyfjdltbW+bPn1/s+QAsXrwYR0fHfNu+++47QkJCmDlzJu3atcu3r0ePHgwaNIgffviBxMTEfPuKuva853Ozcc7Ozjc9T8CY8rFo0aJ8udkODg4sXLgw35i87rnnHoYNG5Zv25gxYwDyfa0IIWoGSVEQQtRafn5+2Nra5ttmamqKm5sb169fN24LCAggOzubtLS0fPmlOc6fPw/A2bNn6d+/PwAZGRmsX7+eHTt2cPbsWW7cuGFMJQD1p/aCLC0tadOmzU3P+aOPPiq0bcqUKbzxxhv5tv3555/Gx+Dg4EKvSUtLIzY2ltjYWJydnTl+/DgA3bt3LzS2qG15de7cudC2nPc/e/ZskZ9ZVFQUBoOBc+fO0bFjR4YMGcK6det45JFHGDp0KPfffz89evQoFJz379+f2bNnM3HiRPbu3csDDzxAjx49aNq06U3PMUdQUBBAoXzivNuOHTtWaF/79u0LbWvQoAFAvq8VIUTNIAGuEKLWKq66gqmpKdnZ2cbncXFxAPz+++/8/vvvxR4vOTnZ+P9Dhgxh9+7dNG3alGHDhuHq6oqZmRnXr1/nzTffLLJuraurKzqd7qbn/Mcff9C1a1cyMjI4fvw4EyZMYN26dbRu3ZqxY8cWOue33377psdLTk7G2dnZOJPq4uJSaMyt8oCL2p/z/p9++ukt3x+gW7du/PLLL6xYsYLt27cbZ1E7dOjA66+/bqwO0bhxY/744w8WL17Mjz/+yBdffAFAs2bNePXVV3n88cdv+n6JiYno9fpir1Ov15OQkFBoX1FfKzk5z3m/VoQQNYMEuEKIOs/e3h6AadOmsXr16luODwgIYPfu3fTr14/vv/8+X6rCn3/+yZtvvlnk624V3OZlbm5Op06d+OGHH2jWrBmTJ0/mgQceMNZ8zTnnEydO5FssV5yc8TExMfj4+OTbd/Xq1Zu+tqjzzjne7t27jbPat9KzZ0969uxJamoqR44cYffu3bzzzjs8/PDDnDhxgiZNmgDQtm1bvvrqKzIzMwkMDOTHH3/k//7v/xg2bBienp7cddddN71Og8FATEwMrq6u+fZFR0djMBiM5y6EqL0kB1cIUed16tQJnU7HH3/8UaLxFy5cAODhhx8ulIf722+/leu5ubi4sHDhQlJSUli8eLFxe5cuXQBKfM45ebKHDx8utK+obbdS2vfPy8rKil69erFmzRrmzp1LampqkTnLZmZmdO3alcWLF/N///d/aJrGd999d9Nj+/v7AxRZCu7gwYMA3HnnnaU+ZyFEzSIBrhCiznN3d2fo0KEcPnyY119/PV8ubY4jR46QkpICYJwBLVgf99SpU6xYsaLcz2/8+PF4enqyceNGLl26BMAzzzyDnZ0d8+bN49SpU4Vek5KSYsyTBXjiiSfQ6/WsXbs2X43c5ORkli1bVupzGjRoEA0bNmTt2rX8+uuvhfZnZmbm+3x+++23QgvOIHf2OGdRWUBAANHR0bccV5xRo0YBamFc3vdLTEw0/gMhZ4wQovaSFAUhRLV24sQJRo8eXeS+9u3bl9ufm9955x3+/fdfZs6cyZYtW+jWrRsODg5cvnyZwMBAzp8/T2RkJNbW1nTu3JnOnTvz+eefExkZSdeuXQkLC2PXrl08/PDDfPnll+VyTjksLS2ZPXs2kydPZsmSJWzcuBEXFxe2b9/O448/Trt27XjggQdo3rw5aWlphIaGcvDgQbp3725s79usWTNmz57N8uXLadOmDY8//jimpqZ8/fXXtGnThpMnT+arNnErFhYWfPnllzz44IP07NmT3r17G1MlwsLC+O2333BycjLW2F2zZg179+7l3nvv5Y477sDS0pKjR4/y888/4+vry+DBgwGV0/vOO+/Qq1cvfH19sbe35/Tp0/zwww84OzsbKxsU55577mHSpEm89dZbtG7dmsceewxN0/j666+5fPkykydP5p577inLbRBC1CRVW6VMCCGKllMH92b/DRo06KZ1cAvWdc3h4+Oj+fj4FNqekpKirVq1SuvQoYNmY2OjWVlZaY0bN9YeeeQRbfPmzVpmZqZxbHR0tDZmzBjN09NTs7S01Nq0aaO9/fbb2sWLFzVAGzVqVIneM0dxdXBzpKWlaV5eXpqJiYn277//GrefPXtWGzt2rObj46OZm5tr9evX19q0aaNNnjw5X93cHO+8847WokULzdzcXGvQoIE2ffp07fLly8bPM6+cOrg3Ex4err300kuan5+fZmFhodnb22stWrTQxo0bp/3888/Gcf/73/+0kSNHas2aNdPs7Ow0W1tbrWXLltr8+fPz1cH9888/tfHjx2utW7fW6tWrp1lZWWl+fn7a5MmTtbCwsCI/s7x1cHN8/PHHWqdOnTRra2vN2tpa69SpU6Eax5qWWwd34cKFhfblfA0WvJdCiOpPp2lF/C1OCCFEnbFv3z7uv/9+Zs6cyWuvvVbVpyOEELdNcnCFEKKOiImJKVTy6vr168yZMwcgXytiIYSoySQHVwgh6ohPP/2U1atXc9999+Hp6UlkZCT/+9//iI6OZvTo0XTr1q2qT1EIIcqFBLhCCFFHdO/enQ4dOrBv3z7i4uIwMTGhRYsWvPLKK0yYMKGqT08IIcqN5OAKIYQQQohaRXJwhRBCCCFErSIBrhBCCCGEqFUkB/c/BoOBiIgI7OzsStUvXgghhBBCVA5N00hKSsLT0/OmzWkkwP1PREQE3t7eVX0aQgghhBDiFi5fvkyDBg2K3S8B7n/s7OwA9YGVV+tPkZ/BYCAmJgYXF5dStQQVNZ/c+7pN7n/dJve/7qqIe5+YmIi3t7cxbiuOBLj/yUlLsLe3lwC3ghgMBtLS0rC3t5cfcnWM3Pu6Te5/3Sb3v+6qyHt/q3RS+UoTQgghhBC1igS4QgghhBCiVpEAVwghhBBC1CqSgyuEEDehaRpZWVlkZ2dX9anUWAaDgczMTNLS0iQHsw6S+193leXem5iYYGpqetslWyXAFUKIYmRkZBAZGUlKSkpVn0qNpmkaBoOBpKQkqTNeB8n9r7vKeu+tra3x8PDA3Ny8zO8tAa4QQhTBYDBw6dIlTExM8PT0xNzcXH45l1HOLHh5zMqImkfuf91V2nuvaRoZGRnExMRw6dIl/Pz8yjzrLwGuEEIUISMjA4PBgLe3N9bW1lV9OjWaBDh1m9z/uqss997KygozMzNCQ0PJyMjA0tKyTO8tyTBCCHETkjMohBCVqzx+7spPbiGEEEIIUatIgCuEEEIIIWoVCXCFEELUSCEhIeh0Oo4dO1bVp1Imo0eP5pFHHqnq0xCi1GrC164EuEIIIWokb29vIiMjad26daW/d1BQEP3798fV1RVLS0saNWrEsGHDiI2NrfRzqSinTp3iscceo1GjRuh0OtatW1fkuHfeeYfGjRtjaWlJhw4d+O233/Lt1zSNJUuW4OXlhZWVFb169eLUqVPG/Tn/UCnqvy+++KLY80tKSmLKlCn4+PhgZWVF9+7dCQgIKHb8+PHjb3odFW3dunU0a9YMKysrvL29efnll0lLSyt2fFpaGqNHj6ZNmzaYmpoWGVAeOHCgyM/t7Nmzhcb26tWr0LZFixYZX2NiYoK3tzfjxo0jJibmptfy5ptv8sknn9zqkquUBLhCCFGLZWRkVNl7Z2dnYzAYKuz4JiYmuLu7Y2pauQWBoqOj6dOnD87OzuzZs4czZ87w8ccf4+HhUatqJqekpHDHHXewcuVK3N3dixzz2WefMWXKFObNm0dQUBB33303Dz74IGFhYcYxq1at4s033+Stt94iICAAd3d37r//fpKSkoDcf6jk/W/x4sXY2Njw4IMPFnt+48aNY+/evWzZsoUTJ07Qt29f+vTpw5UrVwqN/eabbzhy5Aienp6l/hxGjx7NokWLSv26vD799FNmz57NwoULOXPmDB999BGfffYZc+bMKfY12dnZWFlZMXnyZPr06XPT4//777/5Pj8/Pz8Azp07x44dO/KNPXr0KLt37zY+b9WqFZGRkYSFhfHuu++ye/duRo4cWew5GQwGHBwcqFevXgmvvopoQtM0TUtISNAALSEhocLfKztb0/79V9P++ks9ZmeXbUxNk52drUVGRmrZteFiRKnUxHufmpqqnT59WktNTa3qUymVnj17ahMnTtRefvllzcnJSbvnnns0TdO0U6dOaQ8++KBmY2Ojubq6ak8//bQWExNjfF1iYqI2fPhwzdraWnN3d9fWrl2r9ezZU3vppZeMY9LT07UZM2Zonp6emrW1tda5c2dt//79xv0bN27UHBwctN27d2stWrTQTExMtIsXL2ppaWna1KlTi31dSEiI1r9/f61evXqatbW11rJlS+3777/XNE3T4uLitOHDh2vOzs6apaWl5uvrq3388ceapmnapUuXNEALCgoyHuvAgQNap06dNHNzc83d3V2bNWuWlpmZme/zmTRpkjZjxgytfv36mpubm7Zw4cJSfcY7d+7UTE1N8x23oKysLG3MmDFao0aNNEtLS61p06baunXr8o0ZNWqUNmjQIONzg8Ggvfbaa1rjxo01S0tLrW3bttoXX3xh3H+zz6Ki+fj4aG+88Uah7Z07d9aef/75fNuaN2+uzZ49W9M0dU3u7u7asmXLNIPBoGmapqWlpWkODg7ahg0bin2/O++8UxszZkyx+1NSUjQTExPtu+++y7e9Xbt22rx58/JtCw8P17y8vLSTJ08Wex03M2rUqFJ/jRQ0ceJE7b777su3berUqVqPHj1KfA55v1Zy7N+/XwO0+Pj4Il937do17bnnntMe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Zm6//XaioqKIjIzkjjvuoH///gwfPrwlP56IiIhIq+fxQFlZ/c3M6nI6YedOM6/eoNN5XK7v52rxBHfRokUADBs2rN74888/z7hx4wC46667KC0t5dZbbyU/P5/TTz+d999/n/DwcN/8xx57jMDAQK655hpKS0u54IILWLx4MQF191YWERERkYO4XBASAsXF0NCtSCUl5rjLdfyv7Wi0uj64LUV9cJufeiH6L8Xevyn+/k3xbxu8XpgyBdLT69fggmmasHEjpKSYm9AaG8aW7IOrnzQRERERP2e3w9ixEB1tktmCArOfQ0GBeR4dDWPGND65bWlt5DJFREREpDklJ8OMGTBoEOzda24o27vXrNzOmGGOtxUtXoMrIiIiIq1DcjIMHGiSW7OTGfTs2XZWbmsowRURERERH7sdevdu6as4Nm0sHxcREREROTwluCIiIiLSrqhEQURERETwett+7W0NJbgiIiIifi4jA154wbQEKyszmzr07Wtah7Wl7gk1lOCKiIiI+LGMDJg9G3bvhoQEs11vcbHZ9CEzs+21CAPV4IqIiIj4La/XrNzu3m1WbCMiICDAPPbta8aXLDHz2hIluCIiIiJ+avNmU5aQkFB/e14wzxMSYMMGM68tUYIrIiIi4qc8HlNzGxbW8HGn0xz3eI7vdR0rJbgiIiIifsrlMjeUFRc3fLykxBx3uY7vdR0rJbgiIiIifqpnT1Nrm5UFllX/mGWZ8aQkM68tUYIrIiIi4qfsdtMKLDra1OIWFEBVlXncuNGMjxnT9vrhtrHLFREREZGmlJxsWoENGgR795obyvbuhZSUttkiDNQHV0RERMTvJSfDwIHayUxERERE2hG7HXr3bumraBptNC8XEREREWmYElwRERERaVeU4IqIiIhIu6IEV0RERETaFSW4IiIiItKuKMEVERERkXZFCa6IiIiItCtKcEVERESkXVGCKyIiIiLtihJcEREREWlXlOCKiIiISLuiBFdERERE2hUluCIiIiLSrgS29AW0FpZlAVBQUNDCV9J+eb1eCgsLCQkJwW7Xv638iWLv3xR//6b4+6/miH1NnlaTtx2KEtz9CgsLAejatWsLX4mIiIiIHE5hYSEul+uQx23WkVJgP+H1etm5cyfh4eHYbLaWvpx2qaCggK5du7J9+3YiIiJa+nLkOFLs/Zvi798Uf//VHLG3LIvCwkLi4+MPuyqsFdz97HY7CQkJLX0ZfiEiIkJ/yPkpxd6/Kf7+TfH3X00d+8Ot3NZQMYyIiIiItCtKcEVERESkXVGCK8eNw+Hgvvvuw+FwtPSlyHGm2Ps3xd+/Kf7+qyVjr5vMRERERKRd0QquiIiIiLQrSnBFREREpF1RgisiIiIi7YoSXBERERFpV5TgSpOaO3cugwcPJjw8nNjYWEaPHs2mTZvqzbEsi5kzZxIfH09oaCjDhg1j/fr1LXTF0lzmzp2LzWZj8uTJvjHFvn3bsWMHN9xwA1FRUTidTk455RTS09N9xxX/9quqqop7772XHj16EBoaygknnMDs2bPxer2+OYp/+/HJJ59w6aWXEh8fj81m480336x3vDGxLi8vZ+LEiURHRxMWFkZqaipZWVlNdo1KcKVJrVq1ivHjx/P555+zcuVKqqqqGDlyJMXFxb458+bNY8GCBSxcuJC0tDTcbjcjRoygsLCwBa9cmlJaWhpPP/00AwYMqDeu2Ldf+fn5nHXWWQQFBfHuu++yYcMG5s+fT8eOHX1zFP/26+GHH+app55i4cKFbNy4kXnz5vHII4/w5JNP+uYo/u1HcXExAwcOZOHChQ0eb0ysJ0+ezPLly1m6dCmrV6+mqKiIUaNGUV1d3TQXaYk0o9zcXAuwVq1aZVmWZXm9XsvtdlsPPfSQb05ZWZnlcrmsp556qqUuU5pQYWGh1atXL2vlypXWueeea02aNMmyLMW+vZs6dao1dOjQQx5X/Nu3Sy65xPr1r39db+yKK66wbrjhBsuyFP/2DLCWL1/ue96YWO/bt88KCgqyli5d6puzY8cOy263W++9916TXJdWcKVZeTweACIjIwHYunUrOTk5jBw50jfH4XBw7rnnsmbNmha5Rmla48eP55JLLmH48OH1xhX79m3FihWkpKRw9dVXExsbS3JyMs8884zvuOLfvg0dOpQPP/yQ77//HoCvv/6a1atXc/HFFwOKvz9pTKzT09OprKysNyc+Pp5+/fo12c9DYJOcRaQBlmUxZcoUhg4dSr9+/QDIyckBIC4urt7cuLg4MjMzj/s1StNaunQpX331FWlpaQcdU+zbtx9//JFFixYxZcoU7rnnHr744gv++Mc/4nA4GDNmjOLfzk2dOhWPx0OfPn0ICAigurqaBx98kGuvvRbQ739/0phY5+TkEBwcTKdOnQ6aU/P6Y6UEV5rNhAkT+Oabb1i9evVBx2w2W73nlmUdNCZty/bt25k0aRLvv/8+ISEhh5yn2LdPXq+XlJQU5syZA0BycjLr169n0aJFjBkzxjdP8W+fXn31VV566SVefvllTj75ZNauXcvkyZOJj49n7NixvnmKv/84mlg35c+DShSkWUycOJEVK1bw0UcfkZCQ4Bt3u90AB/0LLTc396B/7Unbkp6eTm5uLoMGDSIwMJDAwEBWrVrFn//8ZwIDA33xVezbp86dO5OUlFRvrG/fvmzbtg3Q7/327s477+Tuu+/mV7/6Ff379+fGG2/ktttuY+7cuYDi708aE2u3201FRQX5+fmHnHOslOBKk7IsiwkTJrBs2TL+85//0KNHj3rHe/TogdvtZuXKlb6xiooKVq1axZlnnnm8L1ea0AUXXMC6detYu3at7yslJYXrr7+etWvXcsIJJyj27dhZZ511UEvA77//nsTEREC/99u7kpIS7Pb6KUVAQICvTZji7z8aE+tBgwYRFBRUb052djbffvtt0/08NMmtaiL7/eEPf7BcLpf18ccfW9nZ2b6vkpIS35yHHnrIcrlc1rJly6x169ZZ1157rdW5c2eroKCgBa9cmkPdLgqWpdi3Z1988YUVGBhoPfjgg9YPP/xg/f3vf7ecTqf10ksv+eYo/u3X2LFjrS5duljvvPOOtXXrVmvZsmVWdHS0ddddd/nmKP7tR2FhoZWRkWFlZGRYgLVgwQIrIyPDyszMtCyrcbH+/e9/byUkJFgffPCB9dVXX1nnn3++NXDgQKuqqqpJrlEJrjQpoMGv559/3jfH6/Va9913n+V2uy2Hw2Gdc8451rp161ruoqXZHJjgKvbt29tvv23169fPcjgcVp8+faynn3663nHFv/0qKCiwJk2aZHXr1s0KCQmxTjjhBGv69OlWeXm5b47i33589NFHDf5dP3bsWMuyGhfr0tJSa8KECVZkZKQVGhpqjRo1ytq2bVuTXaPNsiyradaCRURERERanmpwRURERKRdUYIrIiIiIu2KElwRERERaVeU4IqIiIhIu6IEV0RERETaFSW4IiIiItKuKMEVERERkXZFCa6IiIiItCtKcEVEWpnFixdjs9l8X4GBgSQkJHDTTTexY8eOI75+3LhxdO/evfkvVESklQps6QsQEZGGPf/88/Tp04fS0lI++eQT5s6dy6pVq1i3bh1hYWGHfN2f/vQnJk2adByvVESkdVGCKyLSSvXr14+UlBQAzjvvPKqrq7n//vt58803uf766w+aX1JSgtPp5MQTTzzelyoi0qqoREFEpI0444wzAMjMzGTcuHF06NCBdevWMXLkSMLDw7nggguAhksUvF4vTz75JKeccgqhoaF07NiRM844gxUrVtSb9+qrrzJkyBDCwsLo0KEDF154IRkZGcfl84mINBUluCIibcTmzZsBiImJAaCiooLU1FTOP/983nrrLWbNmnXI144bN45JkyYxePBgXn31VZYuXUpqaio//fSTb86cOXO49tprSUpK4rXXXuPFF1+ksLCQs88+mw0bNjTrZxMRaUoqURARaaWqq6upqqqirKyMVatW8cADDxAeHk5qaiqfffYZlZWVzJgxg5tuuumw5/n000958cUXmT59Og888IBv/KKLLvL9evv27dx3331MmDCBP//5z77xESNG0KtXL2bNmsWrr77a9B9SRKQZKMEVEWmlakoSavTv359FixYRFxfnG7vyyiuPeJ53330XgPHjxx9yzr///W+qqqoYM2YMVVVVvvGQkBDOPfdcPvroo597+SIiLUYJrohIK7VkyRL69u1LYGAgcXFxdO7cud5xp9NJRETEEc+Tl5dHQEAAbrf7kHN27doFwODBgxs8brerok1E2g4luCIirVTfvn19XRQaYrPZGnWemJgYqqurycnJOShJrhEdHQ3A66+/TmJi4s+/WBGRVkT/JBcRaed+8YtfALBo0aJDzrnwwgsJDAxky5YtpKSkNPglItJWaAVXRKSdO/vss7nxxht54IEH2LVrF6NGjcLhcJCRkYHT6WTixIl0796d2bNnM336dH788UcuuugiOnXqxK5du/jiiy8ICws7bJcGEZHWRAmuiIgfWLx4MaeeeirPPfccixcvJjQ0lKSkJO655x7fnGnTppGUlMQTTzzBK6+8Qnl5OW63m8GDB/P73/++Ba9eROTnsVmWZbX0RYiIiIiINBXV4IqIiIhIu6IEV0RERETaFSW4IiIiItKuKMEVERERkXZFCa6IiIiItCtKcEVERESkXVGCKyIiIiLtihJcEREREWlXlOCKiIiISLuiBFdERERE2hUluCIiIiLSrvw/pysws7wJ8HMAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 800x600 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(8, 6))\n",
    "sns.regplot(x='Price', y='Sales', data=uploaded_data, color='blue',scatter_kws={'color': 'blue', 'alpha': 0.6, 'label': 'data points'},  \n",
    "    line_kws={'color': 'red', 'linewidth': 2, 'label': f'regeression: Sales = {intercept:.2f} + {slope:.2f}*Price'}  )\n",
    "\n",
    "plt.xlabel('Price', fontsize=12)\n",
    "plt.ylabel('Sales', fontsize=12)\n",
    "plt.title('LinearRegression', fontsize=14)\n",
    "plt.legend()  \n",
    "plt.grid(alpha=0.3)  \n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b7f37293",
   "metadata": {},
   "source": [
    "### 🤔 思考与讨论"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "fc56995e",
   "metadata": {},
   "source": [
    "**Q1：模型的斜率为负值意味着什么？你如何理解价格和销售额之间的关系？**\n",
    "\n",
    "**Q2：是否所有商品的价格与销量都存在线性关系？若关系更复杂应如何处理？**"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d4600821",
   "metadata": {},
   "source": [
    "# 实验4：使用Python实现二元线性回归"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0e1b4f27",
   "metadata": {},
   "source": [
    "当一个特征变量不足以预测目标值时，可以引入多个特征。\n",
    "本实验中，我们将使用两个变量来预测销量，构建一个二元线性回归模型。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "aba44780",
   "metadata": {},
   "source": [
    "### 第一步：导入库与准备数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "978db2cb",
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.linear_model import LinearRegression\n",
    "import numpy as np\n",
    "\n",
    "# 构造两个自变量（特征）和一个因变量（目标）\n",
    "X = np.array([[1, 3], [2, 4], [3, 5], [6, 8], [7, 9]])\n",
    "y = np.array([[10], [12.687], [17.35], [21.8], [27]])"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5742858e",
   "metadata": {},
   "source": [
    "如果你想继续添加自变量因变量关系，代码需要进行怎样的改动？"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6303e712",
   "metadata": {},
   "source": [
    "### 第二步：建立并训练模型"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "9be9e64c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<style>#sk-container-id-1 {color: black;background-color: white;}#sk-container-id-1 pre{padding: 0;}#sk-container-id-1 div.sk-toggleable {background-color: white;}#sk-container-id-1 label.sk-toggleable__label {cursor: pointer;display: block;width: 100%;margin-bottom: 0;padding: 0.3em;box-sizing: border-box;text-align: center;}#sk-container-id-1 label.sk-toggleable__label-arrow:before {content: \"▸\";float: left;margin-right: 0.25em;color: #696969;}#sk-container-id-1 label.sk-toggleable__label-arrow:hover:before {color: black;}#sk-container-id-1 div.sk-estimator:hover label.sk-toggleable__label-arrow:before {color: black;}#sk-container-id-1 div.sk-toggleable__content {max-height: 0;max-width: 0;overflow: hidden;text-align: left;background-color: #f0f8ff;}#sk-container-id-1 div.sk-toggleable__content pre {margin: 0.2em;color: black;border-radius: 0.25em;background-color: #f0f8ff;}#sk-container-id-1 input.sk-toggleable__control:checked~div.sk-toggleable__content {max-height: 200px;max-width: 100%;overflow: auto;}#sk-container-id-1 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {content: \"▾\";}#sk-container-id-1 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-1 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-1 input.sk-hidden--visually {border: 0;clip: rect(1px 1px 1px 1px);clip: rect(1px, 1px, 1px, 1px);height: 1px;margin: -1px;overflow: hidden;padding: 0;position: absolute;width: 1px;}#sk-container-id-1 div.sk-estimator {font-family: monospace;background-color: #f0f8ff;border: 1px dotted black;border-radius: 0.25em;box-sizing: border-box;margin-bottom: 0.5em;}#sk-container-id-1 div.sk-estimator:hover {background-color: #d4ebff;}#sk-container-id-1 div.sk-parallel-item::after {content: \"\";width: 100%;border-bottom: 1px solid gray;flex-grow: 1;}#sk-container-id-1 div.sk-label:hover label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-1 div.sk-serial::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: 0;}#sk-container-id-1 div.sk-serial {display: flex;flex-direction: column;align-items: center;background-color: white;padding-right: 0.2em;padding-left: 0.2em;position: relative;}#sk-container-id-1 div.sk-item {position: relative;z-index: 1;}#sk-container-id-1 div.sk-parallel {display: flex;align-items: stretch;justify-content: center;background-color: white;position: relative;}#sk-container-id-1 div.sk-item::before, #sk-container-id-1 div.sk-parallel-item::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: -1;}#sk-container-id-1 div.sk-parallel-item {display: flex;flex-direction: column;z-index: 1;position: relative;background-color: white;}#sk-container-id-1 div.sk-parallel-item:first-child::after {align-self: flex-end;width: 50%;}#sk-container-id-1 div.sk-parallel-item:last-child::after {align-self: flex-start;width: 50%;}#sk-container-id-1 div.sk-parallel-item:only-child::after {width: 0;}#sk-container-id-1 div.sk-dashed-wrapped {border: 1px dashed gray;margin: 0 0.4em 0.5em 0.4em;box-sizing: border-box;padding-bottom: 0.4em;background-color: white;}#sk-container-id-1 div.sk-label label {font-family: monospace;font-weight: bold;display: inline-block;line-height: 1.2em;}#sk-container-id-1 div.sk-label-container {text-align: center;}#sk-container-id-1 div.sk-container {/* jupyter's `normalize.less` sets `[hidden] { display: none; }` but bootstrap.min.css set `[hidden] { display: none !important; }` so we also need the `!important` here to be able to override the default hidden behavior on the sphinx rendered scikit-learn.org. See: https://github.com/scikit-learn/scikit-learn/issues/21755 */display: inline-block !important;position: relative;}#sk-container-id-1 div.sk-text-repr-fallback {display: none;}</style><div id=\"sk-container-id-1\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>LinearRegression()</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-1\" type=\"checkbox\" checked><label for=\"sk-estimator-id-1\" class=\"sk-toggleable__label sk-toggleable__label-arrow\">LinearRegression</label><div class=\"sk-toggleable__content\"><pre>LinearRegression()</pre></div></div></div></div></div>"
      ],
      "text/plain": [
       "LinearRegression()"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "reg = LinearRegression()\n",
    "reg.fit(X, y)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7fb7af51",
   "metadata": {},
   "source": [
    "### 第三步：输出模型参数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "2a1d2a21",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Coefficients (斜率): [[1.29931716 1.29931716]]\n",
      "Intercept (截距): [5.29395522]\n",
      "y = 1.30 * x1 + 1.30 * x2 + 5.29\n"
     ]
    }
   ],
   "source": [
    "print(\"Coefficients (斜率):\", reg.coef_)\n",
    "print(\"Intercept (截距):\", reg.intercept_)\n",
    "print(\"y = {:.2f} * x1 + {:.2f} * x2 + {:.2f}\".format(\n",
    "    reg.coef_[0][0], reg.coef_[0][1], reg.intercept_[0]))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f5020a91",
   "metadata": {},
   "source": [
    "### 🤔 思考与讨论"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4752b2db",
   "metadata": {},
   "source": [
    "**Q1：如果只使用一个变量（如x1或x2）建立模型，预测效果会怎样？**\n",
    "\n",
    "**Q2：你能举出一个现实生活中二元线性回归可以应用的例子吗？**"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "652a6751",
   "metadata": {},
   "source": [
    "# 实验5：使用Python实现非线性回归（多项式回归）"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a945a2c3",
   "metadata": {},
   "source": [
    "在前面的实验中，我们使用了线性回归来拟合变量之间的关系，适用于数据趋势是“直线”时。\n",
    "\n",
    "但在现实中，很多现象并不是简单的线性关系，例如物理中的加速度变化、价格与销量的非线性波动等。\n",
    "\n",
    "**本实验将介绍如何用多项式回归来拟合这些非线性关系。**"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c2d7f80b",
   "metadata": {},
   "source": [
    "### 第一步：生成模拟的非线性数据"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1ac5aa1f",
   "metadata": {},
   "source": [
    "我们使用 numpy 生成一个包含噪声的二次函数形式的数据集，形式大致为：\n",
    "\n",
    "`y = 2 + x + 0.5 * x² + 噪声`\n",
    "\n",
    "这代表一个抛物线趋势，但由于加入了噪声，更接近真实数据分布。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "0d37b956",
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from sklearn.preprocessing import PolynomialFeatures\n",
    "from sklearn.linear_model import LinearRegression\n",
    "from sklearn.metrics import mean_squared_error\n",
    "\n",
    "# 构造非线性数据\n",
    "np.random.seed(0)\n",
    "x = np.linspace(-3, 3, 100)\n",
    "y = 2 + x + 0.5 * x**2 + np.random.normal(0, 1, 100)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0f8fd195",
   "metadata": {},
   "source": [
    "### 第二步：构造多项式特征"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f3980011",
   "metadata": {},
   "source": [
    "线性回归只能处理一阶直线关系，我们需要将自变量 `x` 转换为多项式特征。\n",
    "\n",
    "通过 `PolynomialFeatures(degree=2)`，我们能扩展出 [1, x, x²] 三个特征。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "94d53898",
   "metadata": {},
   "outputs": [],
   "source": [
    "poly = PolynomialFeatures(degree=2)\n",
    "x_poly = poly.fit_transform(x.reshape(-1, 1))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "147d5e7e",
   "metadata": {},
   "source": [
    "### 第三步：训练多项式回归模型"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "cd89ce6c",
   "metadata": {},
   "source": [
    "使用转换后的 `x_poly` 数据训练回归模型，并进行预测。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "ee9b8d60",
   "metadata": {},
   "outputs": [],
   "source": [
    "model = LinearRegression()\n",
    "model.fit(x_poly, y)\n",
    "y_pred = model.predict(x_poly)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "86e82996",
   "metadata": {},
   "source": [
    "### 第四步：评估模型"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "84a04bf6",
   "metadata": {},
   "source": [
    "我们使用均方误差 (MSE) 来评估模型拟合效果，并查看训练出的系数和截距。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "26aa01fc",
   "metadata": {},
   "outputs": [],
   "source": [
    "mse = mean_squared_error(y, y_pred)\n",
    "print(f\"多项式回归 MSE: {mse:.4f}\")\n",
    "print(f\"系数: {model.coef_}, 截距: {model.intercept_}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "fbbe399b",
   "metadata": {},
   "source": [
    "### 第五步：绘制拟合图"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4df00331",
   "metadata": {},
   "source": [
    "我们将原始散点图与回归拟合曲线一起绘制，以观察模型是否成功捕捉到了非线性趋势。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "ae1bf332",
   "metadata": {},
   "outputs": [],
   "source": [
    "plt.rcParams['font.sans-serif'] = [\"SimHei\"]\n",
    "plt.rcParams['axes.unicode_minus'] = False\n",
    "plt.scatter(x, y, c='b', label='实际数据')\n",
    "plt.plot(x, y_pred, 'r', label='多项式回归')\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d53b3042",
   "metadata": {},
   "source": [
    "### 🤔 思考与讨论"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9a322295",
   "metadata": {},
   "source": [
    "**Q1：观察拟合图像，你认为模型是否较好地捕捉到了非线性趋势？为什么？**\n",
    "\n",
    "**Q2：如果我们提高多项式阶数为5或10，会发生什么？如何判断是否过拟合？**\n",
    "\n",
    "**Q3：非线性回归在哪些实际场景中有优势？能举出几个例子吗？**"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4c8d575c",
   "metadata": {},
   "source": [
    "## 📝 实验总结"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d2e6a4a2",
   "metadata": {},
   "source": [
    "通过本次线性与非线性回归实验的学习，我们掌握了：\n",
    "- **一元线性回归模型**的建立方法及可视化\n",
    "- 多个变量参与的**二元线性回归**建模技巧\n",
    "- 如何利用**多项式特征**进行**非线性**拟合\n",
    "\n",
    "这些回归模型广泛应用于商业预测、科学分析、工程建模等领域，是机器学习的重要基础。\n",
    "\n",
    "**建议你在后续学习中尝试：**\n",
    "- 利用真实数据进行模型建模与验证\n",
    "- 使用评估指标（如MSE、R²）判断模型好坏\n",
    "- 学习正则化技术避免过拟合\n",
    "\n",
    "继续努力，逐步掌握更强大的数据分析与建模能力！"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "torch",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.23"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
